openvibers/openvibe.sites Commits
openvibe.actor becomes the router for agent work, and openvibe.bot names its first robot (owner, 2026-09-29; plan T15/T16). Actor: one API for every AI agent, the right one for each task; a routing design preview (a task, the five modes, four kinds of agent system with illustrative cost, time and success, the pick and why), how a task runs, the modes (cheapest, balanced, best, fastest, private, budgets), what it routes to, live balancing with failover, checks and public rankings, templates for always-on agents, and questions (is it like OpenRouter, which systems, how it chooses, private data). Bot: the Adeept 4WD Smart Car for Raspberry Pi is the first kit, with a question saying why its own open control port never needs exposing. The vision layout gains extra card sections and the router preview (tight on phones).
Changes
@@@ -143,6 +143,16 @@ function visionViz(v) {<figcaption>${esc(z.caption)}</figcaption></figure>`;}++ if (z.kind === 'router') {++ return `<figure class="viz" aria-label="${esc(z.label)}">++ <div class="viz-top"><span class="av"><i class="fa-solid fa-route" aria-hidden="true"></i></span><b>New task</b><span class="lat"><i class="fa-solid fa-wallet" aria-hidden="true"></i> ${esc(z.budget)}</span></div>++ <p class="task">${esc(z.task)}</p>++ <div class="modes" aria-hidden="true">${(z.modes || []).map((m) => `<span${m === z.mode ? ' class="on"' : ''}>${esc(m)}</span>`).join('')}</div>++ <ol class="cands" aria-hidden="true">${(z.candidates || []).map((c) => `<li${c.pick ? ' class="pick"' : ''}><i class="fa-solid ${esc(c.icon)}"></i><b>${esc(c.name)}</b><span>${esc(c.cost)}</span><span>${esc(c.time)}</span><span>${esc(c.success)}</span>${c.pick ? '<em>picked</em>' : ''}</li>`).join('')}</ol>++ <p class="why"><i class="fa-solid fa-circle-info" aria-hidden="true"></i> ${esc(z.why)}</p>++ <figcaption>${esc(z.caption)}</figcaption>++ </figure>`;++ }return '';}function vision(site) {@@@ -173,6 +183,14 @@ ${v.choices ? `${cards(v.features)}</div></section>++${(v.more || []).map((m) => `++ <section${m.id ? ` id="${esc(m.id)}"` : ''}>++ <h2>${esc(m.title)}</h2>++ <p class="lead2">${esc(m.lead)}</p>++ <div class="grid three">++ ${cards(m.cards)}++ </div>++ </section>`).join('')}${v.templates ? `<section><h2>${esc(v.templates.title)}</h2>@@@ -350,6 +368,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}++.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}++.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}++.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}++.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}++.cands{list-style:none;display:grid;gap:6px}++.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}++.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}++.cands li span{text-align:right;font-variant-numeric:tabular-nums}++.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}++.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}++.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.card.big{padding:24px}.card.big b{font-size:17px}.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}@@@ -357,7 +386,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}--@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}++@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}${site.statusApi ? STATUS_CSS : ''}</style></head>@@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}++.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}++.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}++.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}++.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}++.cands{list-style:none;display:grid;gap:6px}++.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}++.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}++.cands li span{text-align:right;font-variant-numeric:tabular-nums}++.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}++.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}++.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.card.big{padding:24px}.card.big b{font-size:17px}.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}@@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}--@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}++@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}</style></head>@@@ -1,6 +1,6 @@{"service": "admin",-- "release": "4e2dec5e2993",++ "release": "d3d93241fa2c","released_at": "2026-09-29T00:00:00.000Z","booted_at": null,"contracts_version": null,@@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}++.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}++.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}++.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}++.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}++.cands{list-style:none;display:grid;gap:6px}++.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}++.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}++.cands li span{text-align:right;font-variant-numeric:tabular-nums}++.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}++.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}++.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.card.big{padding:24px}.card.big b{font-size:17px}.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}@@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}--@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}++@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}</style></head>@@@ -1,6 +1,6 @@{"service": "ai",-- "release": "7d2d151a6842",++ "release": "7438b3f419e0","released_at": "2026-09-29T00:00:00.000Z","booted_at": null,"contracts_version": null,@@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}++.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}++.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}++.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}++.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}++.cands{list-style:none;display:grid;gap:6px}++.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}++.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}++.cands li span{text-align:right;font-variant-numeric:tabular-nums}++.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}++.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}++.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.card.big{padding:24px}.card.big b{font-size:17px}.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}@@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}--@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}++@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}</style></head>@@@ -1,6 +1,6 @@{"service": "ai",-- "release": "d9c70520ecef",++ "release": "7ee74be90e8a","released_at": "2026-09-29T00:00:00.000Z","booted_at": null,"contracts_version": null,@@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}++.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}++.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}++.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}++.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}++.cands{list-style:none;display:grid;gap:6px}++.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}++.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}++.cands li span{text-align:right;font-variant-numeric:tabular-nums}++.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}++.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}++.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.card.big{padding:24px}.card.big b{font-size:17px}.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}@@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}--@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}++@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}</style></head>@@@ -1,6 +1,6 @@{"service": "api",-- "release": "4dc46ad3c820",++ "release": "57d0965a86a0","released_at": "2026-09-29T00:00:00.000Z","booted_at": null,"contracts_version": null,@@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}++.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}++.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}++.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}++.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}++.cands{list-style:none;display:grid;gap:6px}++.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}++.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}++.cands li span{text-align:right;font-variant-numeric:tabular-nums}++.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}++.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}++.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.card.big{padding:24px}.card.big b{font-size:17px}.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}@@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}--@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}++@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}</style></head>@@@ -1,6 +1,6 @@{"service": "auth",-- "release": "2d9159294e65",++ "release": "6eec453e0986","released_at": "2026-09-29T00:00:00.000Z","booted_at": null,"contracts_version": null,@@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}++.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}++.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}++.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}++.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}++.cands{list-style:none;display:grid;gap:6px}++.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}++.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}++.cands li span{text-align:right;font-variant-numeric:tabular-nums}++.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}++.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}++.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.card.big{padding:24px}.card.big b{font-size:17px}.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}@@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}--@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}++@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}</style></head>@@@ -1,6 +1,6 @@{"service": "stream",-- "release": "12285800442e",++ "release": "d89063824a8f","released_at": "2026-09-29T00:00:00.000Z","booted_at": null,"contracts_version": null,@@@ -3,9 +3,9 @@<head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">--<title>OpenVibe.Actor — Your agent in the cloud, connected to everything OpenVibe.</title>--<meta name="description" content="OpenVibe.Actor gives you an AI agent that lives in OpenVibe's cloud and works for you around the clock. It remembers, runs on schedules and triggers, uses every OpenVibe product as a tool, browses and codes in a sandbox, and asks before it does anything that matters. Talk to it from any OpenVibe site, in chat, or from your own apps.">--<meta name="keywords" content="cloud ai agent, hosted ai agent, personal ai agent, ai agent with memory, autonomous ai assistant, ai agent platform, open source ai agent, mcp server, ai agent approvals">++<title>OpenVibe.Actor — One API for every AI agent. The right one for each task.</title>++<meta name="description" content="OpenVibe.Actor sends each task to the agent system best suited to it, from hosted agent platforms to open-source runtimes, coding agents and OpenVibe's own, and balances them live on price, speed and success. Pick a mode (cheapest, balanced, best, fastest or private), set a budget, and get a checked result with its cost and the reason for every choice. On top of it, your own always-on agents work across the whole OpenVibe network.">++<meta name="keywords" content="ai agent router, openrouter for agents, agent api, route tasks to ai agents, cheapest ai agent, ai agent comparison, hosted ai agent, cloud ai agent, personal ai agent, mcp server"><meta name="robots" content="index, follow, max-image-preview:large"><meta name="theme-color" content="#a78bfa"><link rel="canonical" href="https://openvibe.actor/">@@@ -16,15 +16,15 @@<meta property="og:type" content="website"><meta property="og:site_name" content="OpenVibe.Actor"><meta property="og:url" content="https://openvibe.actor/">--<meta property="og:title" content="OpenVibe.Actor — Your agent in the cloud, connected to everything OpenVibe.">--<meta property="og:description" content="OpenVibe.Actor gives you an AI agent that lives in OpenVibe's cloud and works for you around the clock. It remembers, runs on schedules and triggers, uses every OpenVibe product as a tool, browses and codes in a sandbox, and asks before it does anything that matters. Talk to it from any OpenVibe site, in chat, or from your own apps.">++<meta property="og:title" content="OpenVibe.Actor — One API for every AI agent. The right one for each task.">++<meta property="og:description" content="OpenVibe.Actor sends each task to the agent system best suited to it, from hosted agent platforms to open-source runtimes, coding agents and OpenVibe's own, and balances them live on price, speed and success. Pick a mode (cheapest, balanced, best, fastest or private), set a budget, and get a checked result with its cost and the reason for every choice. On top of it, your own always-on agents work across the whole OpenVibe network."><meta property="og:image" content="https://openvibe.network/assets/logo-512.png"><meta property="og:image:alt" content="OpenVibe"><meta name="twitter:card" content="summary">--<meta name="twitter:title" content="OpenVibe.Actor — Your agent in the cloud, connected to everything OpenVibe.">--<meta name="twitter:description" content="OpenVibe.Actor gives you an AI agent that lives in OpenVibe's cloud and works for you around the clock. It remembers, runs on schedules and triggers, uses every OpenVibe product as a tool, browses and codes in a sandbox, and asks before it does anything that matters. Talk to it from any OpenVibe site, in chat, or from your own apps.">++<meta name="twitter:title" content="OpenVibe.Actor — One API for every AI agent. The right one for each task.">++<meta name="twitter:description" content="OpenVibe.Actor sends each task to the agent system best suited to it, from hosted agent platforms to open-source runtimes, coding agents and OpenVibe's own, and balances them live on price, speed and success. Pick a mode (cheapest, balanced, best, fastest or private), set a budget, and get a checked result with its cost and the reason for every choice. On top of it, your own always-on agents work across the whole OpenVibe network."><meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">--<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.actor/#site","url":"https://openvibe.actor/","name":"OpenVibe.Actor","description":"OpenVibe.Actor gives you an AI agent that lives in OpenVibe's cloud and works for you around the clock. It remembers, runs on schedules and triggers, uses every OpenVibe product as a tool, browses and codes in a sandbox, and asks before it does anything that matters. Talk to it from any OpenVibe site, in chat, or from your own apps.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.actor/#page","url":"https://openvibe.actor/","name":"OpenVibe.Actor — Your agent in the cloud, connected to everything OpenVibe.","description":"OpenVibe.Actor gives you an AI agent that lives in OpenVibe's cloud and works for you around the clock. It remembers, runs on schedules and triggers, uses every OpenVibe product as a tool, browses and codes in a sandbox, and asks before it does anything that matters. Talk to it from any OpenVibe site, in chat, or from your own apps.","isPartOf":{"@id":"https://openvibe.actor/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Actor","item":"https://openvibe.actor/"}]}},{"@type":"FAQPage","@id":"https://openvibe.actor/#faq","mainEntity":[{"@type":"Question","name":"How is this different from a chat assistant?","acceptedAnswer":{"@type":"Answer","text":"It keeps working when you leave: it has memory, schedules and triggers, and it can act across OpenVibe with the permissions you give it."}},{"@type":"Question","name":"Can it do things without asking?","acceptedAnswer":{"@type":"Answer","text":"Only what you allow. You grant each tool, and anything with consequences waits for your approval. Every action is logged, and you can stop an agent at any time."}},{"@type":"Question","name":"Which AI models does it use?","acceptedAnswer":{"@type":"Answer","text":"Any model OpenVibe.AI routes to, including open and local models, or your own API key."}},{"@type":"Question","name":"Can other apps use my agent?","acceptedAnswer":{"@type":"Answer","text":"Yes: an API, webhooks and an MCP server connect it to other tools and assistants."}},{"@type":"Question","name":"What will it cost?","acceptedAnswer":{"@type":"Answer","text":"You will be able to start without paying, within limits published before launch; heavier use and bigger models will be paid."}}]}]}</script>++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.actor/#site","url":"https://openvibe.actor/","name":"OpenVibe.Actor","description":"OpenVibe.Actor sends each task to the agent system best suited to it, from hosted agent platforms to open-source runtimes, coding agents and OpenVibe's own, and balances them live on price, speed and success. Pick a mode (cheapest, balanced, best, fastest or private), set a budget, and get a checked result with its cost and the reason for every choice. On top of it, your own always-on agents work across the whole OpenVibe network.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.actor/#page","url":"https://openvibe.actor/","name":"OpenVibe.Actor — One API for every AI agent. The right one for each task.","description":"OpenVibe.Actor sends each task to the agent system best suited to it, from hosted agent platforms to open-source runtimes, coding agents and OpenVibe's own, and balances them live on price, speed and success. Pick a mode (cheapest, balanced, best, fastest or private), set a budget, and get a checked result with its cost and the reason for every choice. On top of it, your own always-on agents work across the whole OpenVibe network.","isPartOf":{"@id":"https://openvibe.actor/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Actor","item":"https://openvibe.actor/"}]}},{"@type":"FAQPage","@id":"https://openvibe.actor/#faq","mainEntity":[{"@type":"Question","name":"Is this like OpenRouter?","acceptedAnswer":{"@type":"Answer","text":"Yes, for agents: one API and one bill for many agent systems, with live prices and rankings. Actor routes whole tasks rather than single model calls, and it checks the results before you get them."}},{"@type":"Question","name":"Which agent systems does it use?","acceptedAnswer":{"@type":"Answer","text":"OpenVibe's own runtime, hosted agent platforms from companies like OpenAI and Anthropic, coding agents, and open-source agents on OpenVibe's hardware. Each is an adapter, so new ones join quickly."}},{"@type":"Question","name":"How does it choose?","acceptedAnswer":{"@type":"Answer","text":"For each kind of task it compares price, speed, success rate and current health across agent systems, then applies your mode and budget. Every choice is recorded and explained."}},{"@type":"Question","name":"Can I keep my data on OpenVibe?","acceptedAnswer":{"@type":"Answer","text":"Yes. Private mode uses only OpenVibe's own runtime and open models on its own hardware."}},{"@type":"Question","name":"Can it act without asking?","acceptedAnswer":{"@type":"Answer","text":"Only as far as you allow. Anything with consequences, like publishing, spending or moving a robot, waits for your approval, and every action is logged."}},{"@type":"Question","name":"What will it cost?","acceptedAnswer":{"@type":"Answer","text":"You will be able to start without paying, within limits published before launch; bigger tasks and stronger agents will be paid, with the cost shown per task."}}]}]}</script><script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script><script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script><link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>@@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}++.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}++.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}++.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}++.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}++.cands{list-style:none;display:grid;gap:6px}++.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}++.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}++.cands li span{text-align:right;font-variant-numeric:tabular-nums}++.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}++.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}++.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.card.big{padding:24px}.card.big b{font-size:17px}.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}@@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}--@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}++@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}</style></head>@@@ -142,77 +153,105 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo<div class="mark"><i class="fa-solid fa-user-astronaut" aria-hidden="true"></i></div><div class="badge"><span class="ov-mark" data-size="16" data-variant="actor"></span> Part of the OpenVibe network · <b>being built</b></div><h1>OpenVibe<span class="d">.</span><span class="tld">Actor</span></h1>-- <div class="tag">Your agent in the cloud, connected to everything OpenVibe.</div>-- <p class="lead">OpenVibe.Actor gives you an AI agent that lives in OpenVibe's cloud and works for you around the clock. It remembers, runs on schedules and triggers, uses every OpenVibe product as a tool, browses and codes in a sandbox, and asks before it does anything that matters. Talk to it from any OpenVibe site, in chat, or from your own apps.</p>++ <div class="tag">One API for every AI agent. The right one for each task.</div>++ <p class="lead">OpenVibe.Actor sends each task to the agent system best suited to it, from hosted agent platforms to open-source runtimes, coding agents and OpenVibe's own, and balances them live on price, speed and success. Pick a mode (cheapest, balanced, best, fastest or private), set a budget, and get a checked result with its cost and the reason for every choice. On top of it, your own always-on agents work across the whole OpenVibe network.</p><div class="ctas"><a class="btn btn-primary" href="https://openvibe.network/login?return=https%3A%2F%2Fopenvibe.actor%2F"><i class="fa-solid fa-right-to-bracket"></i> Sign in with OpenVibe</a><a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> See the network</a><a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a></div></div>-- <figure class="viz" aria-label="Design preview: an agent's activity feed ending in a request for approval">-- <div class="viz-top"><span class="av"><i class="fa-solid fa-user-astronaut" aria-hidden="true"></i></span><b>Nova</b><span class="muted">stream co-host</span><span class="lat"><i class="fa-solid fa-cloud" aria-hidden="true"></i> always on</span></div>-- <ol class="feed"><li><i class="fa-solid fa-circle-check" aria-hidden="true"></i><span>Watched tonight's stream and marked 3 highlights</span></li><li><i class="fa-solid fa-circle-check" aria-hidden="true"></i><span>Clipped the best one on OpenVibe.Media</span></li><li><i class="fa-solid fa-circle-check" aria-hidden="true"></i><span>Drafted a post for your blog with the clip</span></li>-- <li class="ask"><i class="fa-solid fa-hand" aria-hidden="true"></i><span>Publish the post on openvibe.blog?</span><span class="pills" aria-hidden="true"><span class="ok">Approve</span><span>Not yet</span></span></li></ol>-- <figcaption>Design preview of an agent at work</figcaption>++ <figure class="viz" aria-label="Design preview: a task routed across four agent systems with cost, time and success estimates, the balanced mode selected">++ <div class="viz-top"><span class="av"><i class="fa-solid fa-route" aria-hidden="true"></i></span><b>New task</b><span class="lat"><i class="fa-solid fa-wallet" aria-hidden="true"></i> budget 50¢</span></div>++ <p class="task">Research five competitors of my shop and write a one-page brief with sources.</p>++ <div class="modes" aria-hidden="true"><span>Cheapest</span><span class="on">Balanced</span><span>Best</span><span>Fastest</span><span>Private</span></div>++ <ol class="cands" aria-hidden="true"><li class="pick"><i class="fa-solid fa-circle-nodes"></i><b>OpenVibe runtime</b><span>6¢</span><span>3 min</span><span>92%</span><em>picked</em></li><li><i class="fa-solid fa-cloud"></i><b>Hosted frontier agent</b><span>31¢</span><span>2 min</span><span>95%</span></li><li><i class="fa-solid fa-code"></i><b>Coding agent</b><span>12¢</span><span>4 min</span><span>81%</span></li><li><i class="fa-solid fa-lock"></i><b>Open model on OpenVibe</b><span>1¢</span><span>7 min</span><span>74%</span></li></ol>++ <p class="why"><i class="fa-solid fa-circle-info" aria-hidden="true"></i> Meets this task's quality bar at the lowest expected cost; a second model family checks the brief before you get it.</p>++ <figcaption>Design preview; the numbers are illustrative</figcaption></figure></header><section id="what">-- <h2>Start in a minute</h2>-- <p class="lead2">Describe what you want or start from a template. Change anything later.</p>++ <h2>How a task runs</h2>++ <p class="lead2">Send a task from the site, the API or any OpenVibe app. Actor does the rest.</p><ol class="steps">-- <li><span class="n">1</span><b>Create an agent</b><span>Pick a template or describe the job in your own words. Choose its model and its personality.</span></li>-- <li><span class="n">2</span><b>Decide what it may do</b><span>Grant it tools one by one. Anything with consequences, like publishing, spending or moving a robot, waits for your approval.</span></li>-- <li><span class="n">3</span><b>Let it work</b><span>It runs in the cloud on schedules and triggers, and you can reach it from any OpenVibe site.</span></li>++ <li><span class="n">1</span><b>Describe the task</b><span>Say what you want done, pick a mode and set a budget. Attach files or give it a robot, a site or a stream to work with.</span></li>++ <li><span class="n">2</span><b>Actor picks the agent</b><span>It weighs every agent system on live price, speed and success for this kind of task, picks one, and tells you why.</span></li>++ <li><span class="n">3</span><b>Checked, then delivered</b><span>A different model checks the result; a failed check moves the task to a stronger agent. You see the cost to the cent.</span></li></ol></section><section>-- <h2>What your agent can do</h2>-- <p class="lead2">An agent is only as useful as what it can reach. Yours can reach the whole network.</p>++ <h2>Modes</h2>++ <p class="lead2">Tell Actor what matters most. It balances the rest.</p><div class="grid three">-- <div class="card"><div class="ic"><i class="fa-solid fa-cloud" aria-hidden="true"></i></div><b>Always on</b><span>Runs in OpenVibe's cloud around the clock. Close your laptop; it keeps going.</span></div>-- <div class="card"><div class="ic"><i class="fa-solid fa-circle-nodes" aria-hidden="true"></i></div><b>Uses the whole network</b><span>Live, Chat, Blog, Wiki, Community, Tools, Media, Host, Bot and more, each through its own API.</span></div>-- <div class="card"><div class="ic"><i class="fa-solid fa-window-maximize" aria-hidden="true"></i></div><b>Browses and codes</b><span>A sandboxed browser and code runner for work outside the network.</span></div>-- <div class="card"><div class="ic"><i class="fa-solid fa-brain" aria-hidden="true"></i></div><b>Remembers</b><span>Long-term memory you can read, edit and wipe.</span></div>-- <div class="card"><div class="ic"><i class="fa-solid fa-hand" aria-hidden="true"></i></div><b>Asks first</b><span>An approval inbox, a full activity log, spending limits and a kill switch.</span></div>-- <div class="card"><div class="ic"><i class="fa-solid fa-shuffle" aria-hidden="true"></i></div><b>Any model</b><span>Routed through OpenVibe.AI: hosted, open or local models, or your own key.</span></div>++ <div class="card"><div class="ic"><i class="fa-solid fa-coins" aria-hidden="true"></i></div><b>Cheapest</b><span>The lowest expected cost that still meets the task's quality bar.</span></div>++ <div class="card"><div class="ic"><i class="fa-solid fa-scale-balanced" aria-hidden="true"></i></div><b>Balanced</b><span>The default: cost, quality and speed weighed together.</span></div>++ <div class="card"><div class="ic"><i class="fa-solid fa-trophy" aria-hidden="true"></i></div><b>Best</b><span>The highest chance of a right answer first time; cost comes second.</span></div>++ <div class="card"><div class="ic"><i class="fa-solid fa-bolt" aria-hidden="true"></i></div><b>Fastest</b><span>The shortest time to a checked result.</span></div>++ <div class="card"><div class="ic"><i class="fa-solid fa-lock" aria-hidden="true"></i></div><b>Private</b><span>Only agents that keep your data on OpenVibe: its own runtime and open models on its hardware.</span></div>++ <div class="card"><div class="ic"><i class="fa-solid fa-wallet" aria-hidden="true"></i></div><b>Budgets</b><span>A hard limit per task and per day. Actor never goes over it.</span></div>++ </div>++ </section>++++ <section id="routes">++ <h2>What it routes to</h2>++ <p class="lead2">Every agent system worth using, behind one API, one key and one bill.</p>++ <div class="grid three">++ <div class="card"><div class="ic"><i class="fa-solid fa-circle-nodes" aria-hidden="true"></i></div><b>OpenVibe's own runtime</b><span>Uses every OpenVibe product as a tool, with models chosen by OpenVibe.AI.</span></div>++ <div class="card"><div class="ic"><i class="fa-solid fa-cloud" aria-hidden="true"></i></div><b>Hosted agent platforms</b><span>Agent platforms from companies like OpenAI and Anthropic, with their browsers, code runners and search.</span></div>++ <div class="card"><div class="ic"><i class="fa-solid fa-code" aria-hidden="true"></i></div><b>Coding agents</b><span>For tasks that are really code: fixes, features, reviews and tests.</span></div>++ <div class="card"><div class="ic"><i class="fa-solid fa-server" aria-hidden="true"></i></div><b>Open-source agents</b><span>Open runtimes and open models on OpenVibe's own hardware: the Private mode.</span></div>++ <div class="card"><div class="ic"><i class="fa-solid fa-key" aria-hidden="true"></i></div><b>Your own keys</b><span>Bring a key for any platform and pay it directly; Actor still routes, checks and explains.</span></div>++ <div class="card"><div class="ic"><i class="fa-solid fa-plug-circle-plus" aria-hidden="true"></i></div><b>New ones, fast</b><span>A new agent platform is one adapter. The day it lands, every app and agent can use it.</span></div>++ </div>++ </section>++ <section>++ <h2>Balanced live, explained always</h2>++ <p class="lead2">Choices come from what actually happens, not from marketing pages.</p>++ <div class="grid three">++ <div class="card"><div class="ic"><i class="fa-solid fa-chart-line" aria-hidden="true"></i></div><b>Live signals</b><span>Price, speed, success rate and outages per agent system and per kind of task, updated from real runs.</span></div>++ <div class="card"><div class="ic"><i class="fa-solid fa-arrows-rotate" aria-hidden="true"></i></div><b>Failover</b><span>When an agent system slows down or fails, tasks move to the next best one at once.</span></div>++ <div class="card"><div class="ic"><i class="fa-solid fa-list-check" aria-hidden="true"></i></div><b>Checked results</b><span>Cheap first, then stronger agents only when a check fails: you pay for strength only when a task needs it.</span></div>++ <div class="card"><div class="ic"><i class="fa-solid fa-magnifying-glass-chart" aria-hidden="true"></i></div><b>Public rankings</b><span>Success, cost and time per agent system for each kind of task, from real traffic, with dates.</span></div>++ <div class="card"><div class="ic"><i class="fa-solid fa-receipt" aria-hidden="true"></i></div><b>Every choice explained</b><span>Which agent ran, why it won, what else was considered and what it cost.</span></div>++ <div class="card"><div class="ic"><i class="fa-solid fa-user-astronaut" aria-hidden="true"></i></div><b>Your agents, on top</b><span>Always-on agents with memory, schedules and approvals; every task they take goes through the router.</span></div></div></section><section>-- <h2>Start from a template</h2>-- <p class="lead2">Each one is a starting point you can change.</p>++ <h2>Start an agent from a template</h2>++ <p class="lead2">Each one is a starting point you can change, and each routes its work through Actor.</p><div class="chips big"><span><i class="fa-solid fa-tower-broadcast" aria-hidden="true"></i>Stream co-host</span><span><i class="fa-solid fa-shield" aria-hidden="true"></i>Chat moderator</span><span><i class="fa-solid fa-magnifying-glass" aria-hidden="true"></i>Research assistant</span><span><i class="fa-solid fa-globe" aria-hidden="true"></i>Site builder</span><span><i class="fa-solid fa-robot" aria-hidden="true"></i>Robot pilot</span><span><i class="fa-solid fa-calendar-check" aria-hidden="true"></i>Personal assistant</span></div></section><section class="meanwhile"><h2>Reachable everywhere</h2>-- <p class="lead2">Your agent is part of the network, not a separate app.</p>++ <p class="lead2">Actor is part of the network, not a separate app.</p><div class="grid"><div class="card"><div class="ic"><i class="fa-solid fa-bars" aria-hidden="true"></i></div><b>On every OpenVibe site</b><span>An agent button in the navbar, with the page you are on as context.</span></div><a class="card" href="https://openvibe.chat"><div class="ic"><i class="fa-solid fa-comments" aria-hidden="true"></i></div><b>In chat</b><span>Direct messages on OpenVibe.Chat and @mentions in Live chat and Community threads.</span><span class="go">openvibe.chat →</span></a>-- <a class="card" href="https://openvibe.bot"><div class="ic"><i class="fa-solid fa-robot" aria-hidden="true"></i></div><b>With your robots</b><span>Give it a robot on OpenVibe.Bot to patrol, check on or perform with, with your approval.</span><span class="go">openvibe.bot →</span></a>-- <a class="card" href="https://openvibe.codes"><div class="ic"><i class="fa-solid fa-plug" aria-hidden="true"></i></div><b>From your own apps</b><span>An API, webhooks and an MCP server, so other assistants can use OpenVibe tools and talk to your agent.</span><span class="go">openvibe.codes →</span></a>++ <a class="card" href="https://openvibe.bot"><div class="ic"><i class="fa-solid fa-robot" aria-hidden="true"></i></div><b>With your robots</b><span>Give an agent a robot on OpenVibe.Bot to patrol, check on or perform with, with your approval.</span><span class="go">openvibe.bot →</span></a>++ <a class="card" href="https://openvibe.codes"><div class="ic"><i class="fa-solid fa-plug" aria-hidden="true"></i></div><b>From your own apps</b><span>An API, webhooks and an MCP server, so other assistants can hand tasks to Actor.</span><span class="go">openvibe.codes →</span></a></div></section><section id="questions" class="faq"><h2>Questions</h2>-- <details><summary>How is this different from a chat assistant?</summary><p>It keeps working when you leave: it has memory, schedules and triggers, and it can act across OpenVibe with the permissions you give it.</p></details>-- <details><summary>Can it do things without asking?</summary><p>Only what you allow. You grant each tool, and anything with consequences waits for your approval. Every action is logged, and you can stop an agent at any time.</p></details>-- <details><summary>Which AI models does it use?</summary><p>Any model OpenVibe.AI routes to, including open and local models, or your own API key.</p></details>-- <details><summary>Can other apps use my agent?</summary><p>Yes: an API, webhooks and an MCP server connect it to other tools and assistants.</p></details>-- <details><summary>What will it cost?</summary><p>You will be able to start without paying, within limits published before launch; heavier use and bigger models will be paid.</p></details>++ <details><summary>Is this like OpenRouter?</summary><p>Yes, for agents: one API and one bill for many agent systems, with live prices and rankings. Actor routes whole tasks rather than single model calls, and it checks the results before you get them.</p></details>++ <details><summary>Which agent systems does it use?</summary><p>OpenVibe's own runtime, hosted agent platforms from companies like OpenAI and Anthropic, coding agents, and open-source agents on OpenVibe's hardware. Each is an adapter, so new ones join quickly.</p></details>++ <details><summary>How does it choose?</summary><p>For each kind of task it compares price, speed, success rate and current health across agent systems, then applies your mode and budget. Every choice is recorded and explained.</p></details>++ <details><summary>Can I keep my data on OpenVibe?</summary><p>Yes. Private mode uses only OpenVibe's own runtime and open models on its own hardware.</p></details>++ <details><summary>Can it act without asking?</summary><p>Only as far as you allow. Anything with consequences, like publishing, spending or moving a robot, waits for your approval, and every action is logged.</p></details>++ <details><summary>What will it cost?</summary><p>You will be able to start without paying, within limits published before launch; bigger tasks and stronger agents will be paid, with the cost shown per task.</p></details></section><section class="build"><div class="card"><b><i class="fa-solid fa-person-digging" aria-hidden="true"></i> Build status</b>-- <span>OpenVibe.Actor is being built now, on the network's accounts, AI router and event system that already run. Its own service is not running yet: this page is a placeholder, nothing here is live yet. It opens with agent accounts with delegated permissions on OpenVibe.Network and the Actor service. · as of 2026-09-29 · <a href="/status.json">status.json</a></span>++ <span>OpenVibe.Actor is being built now, on the network's accounts, AI router and event system that already run. Its own service is not running yet: this page is a placeholder, nothing here is live yet. It opens with the task router with its first agent adapters, then personal agents on OpenVibe.Network accounts. · as of 2026-09-29 · <a href="/status.json">status.json</a></span></div></section>@@@ -1,7 +1,7 @@{"name": "OpenVibe.Actor","short_name": "Actor",-- "description": "Your agent in the cloud, connected to everything OpenVibe.",++ "description": "One API for every AI agent. The right one for each task.","start_url": "/","scope": "/","display": "standalone",@@@ -1,6 +1,6 @@{"service": "actor",-- "release": "d726e134d007",++ "release": "90914e18ca92","released_at": "2026-09-29T00:00:00.000Z","booted_at": null,"contracts_version": null,@@@ -8,7 +8,7 @@"repoExists": false,"repoStage": "charter-only","service": null,-- "launchWaitsFor": "agent accounts with delegated permissions on OpenVibe.Network and the Actor service",++ "launchWaitsFor": "the task router with its first agent adapters, then personal agents on OpenVibe.Network accounts","factsAsOf": "2026-09-29","network": "https://openvibe.network","updated": "2026-09-29",@@@ -24,7 +24,7 @@<meta name="twitter:title" content="OpenVibe.Bot — Get your robot online in minutes."><meta name="twitter:description" content="OpenVibe.Bot is an open control panel for robots. Add a robot, pair it with one command or a QR code, and drive it from any browser with live video, real controls and a stop button that always works. Buy a ready-made bot or bring your own Raspberry Pi, ESP32, ROS 2 robot or phone. Share control, automate it, hand it to your AI agent, and stream it to OpenVibe.Live or openre.stream when you want to."><meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">--<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.bot/#site","url":"https://openvibe.bot/","name":"OpenVibe.Bot","description":"OpenVibe.Bot is an open control panel for robots. Add a robot, pair it with one command or a QR code, and drive it from any browser with live video, real controls and a stop button that always works. Buy a ready-made bot or bring your own Raspberry Pi, ESP32, ROS 2 robot or phone. Share control, automate it, hand it to your AI agent, and stream it to OpenVibe.Live or openre.stream when you want to.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.bot/#page","url":"https://openvibe.bot/","name":"OpenVibe.Bot — Get your robot online in minutes.","description":"OpenVibe.Bot is an open control panel for robots. Add a robot, pair it with one command or a QR code, and drive it from any browser with live video, real controls and a stop button that always works. Buy a ready-made bot or bring your own Raspberry Pi, ESP32, ROS 2 robot or phone. Share control, automate it, hand it to your AI agent, and stream it to OpenVibe.Live or openre.stream when you want to.","isPartOf":{"@id":"https://openvibe.bot/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Bot","item":"https://openvibe.bot/"}]}},{"@type":"FAQPage","@id":"https://openvibe.bot/#faq","mainEntity":[{"@type":"Question","name":"Do I need to open ports on my router?","acceptedAnswer":{"@type":"Answer","text":"No. The robot connects out to OpenVibe, and video and controls travel over WebRTC, so it works behind ordinary home and mobile networks."}},{"@type":"Question","name":"Is it only for streaming?","acceptedAnswer":{"@type":"Answer","text":"No. Streaming is optional. Bot is a control panel for your robot first: drive it, check on it, share it and automate it."}},{"@type":"Question","name":"What hardware works?","acceptedAnswer":{"@type":"Answer","text":"A Raspberry Pi or another Linux board, an ESP32, a ROS 2 robot, an Android phone, or an ONVIF or RTSP camera. The curated kits list exactly what to buy."}},{"@type":"Question","name":"How does it keep the robot safe?","acceptedAnswer":{"@type":"Answer","text":"The device stops its motors by itself when commands or the connection stop. There is an emergency stop in the panel, limits on speed, range and time, and every command is logged."}},{"@type":"Question","name":"What will it cost?","acceptedAnswer":{"@type":"Answer","text":"Controlling your own robot will not cost anything. Limits and any paid extras will be published before launch."}}]}]}</script>++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.bot/#site","url":"https://openvibe.bot/","name":"OpenVibe.Bot","description":"OpenVibe.Bot is an open control panel for robots. Add a robot, pair it with one command or a QR code, and drive it from any browser with live video, real controls and a stop button that always works. Buy a ready-made bot or bring your own Raspberry Pi, ESP32, ROS 2 robot or phone. Share control, automate it, hand it to your AI agent, and stream it to OpenVibe.Live or openre.stream when you want to.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.bot/#page","url":"https://openvibe.bot/","name":"OpenVibe.Bot — Get your robot online in minutes.","description":"OpenVibe.Bot is an open control panel for robots. Add a robot, pair it with one command or a QR code, and drive it from any browser with live video, real controls and a stop button that always works. Buy a ready-made bot or bring your own Raspberry Pi, ESP32, ROS 2 robot or phone. Share control, automate it, hand it to your AI agent, and stream it to OpenVibe.Live or openre.stream when you want to.","isPartOf":{"@id":"https://openvibe.bot/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Bot","item":"https://openvibe.bot/"}]}},{"@type":"FAQPage","@id":"https://openvibe.bot/#faq","mainEntity":[{"@type":"Question","name":"Do I need to open ports on my router?","acceptedAnswer":{"@type":"Answer","text":"No. The robot connects out to OpenVibe, and video and controls travel over WebRTC, so it works behind ordinary home and mobile networks."}},{"@type":"Question","name":"Is it only for streaming?","acceptedAnswer":{"@type":"Answer","text":"No. Streaming is optional. Bot is a control panel for your robot first: drive it, check on it, share it and automate it."}},{"@type":"Question","name":"Which robot comes first?","acceptedAnswer":{"@type":"Answer","text":"The Adeept 4WD Smart Car Kit for Raspberry Pi: four motors, a pan-tilt camera, distance and line sensors, lights and a buzzer. OpenVibe's device agent drives it directly, so its own open control port never has to be exposed."}},{"@type":"Question","name":"What hardware works?","acceptedAnswer":{"@type":"Answer","text":"A Raspberry Pi or another Linux board, an ESP32, a ROS 2 robot, an Android phone, or an ONVIF or RTSP camera. The curated kits list exactly what to buy."}},{"@type":"Question","name":"How does it keep the robot safe?","acceptedAnswer":{"@type":"Answer","text":"The device stops its motors by itself when commands or the connection stop. There is an emergency stop in the panel, limits on speed, range and time, and every command is logged."}},{"@type":"Question","name":"What will it cost?","acceptedAnswer":{"@type":"Answer","text":"Controlling your own robot will not cost anything. Limits and any paid extras will be published before launch."}}]}]}</script><script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script><script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script><link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>@@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}++.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}++.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}++.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}++.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}++.cands{list-style:none;display:grid;gap:6px}++.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}++.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}++.cands li span{text-align:right;font-variant-numeric:tabular-nums}++.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}++.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}++.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.card.big{padding:24px}.card.big b{font-size:17px}.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}@@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}--@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}++@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}</style></head>@@@ -180,7 +191,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo<h2>Buy one or bring your own</h2><p class="lead2">Start with hardware that is known to work, or use what you already have.</p><div class="choice">-- <div class="card big"><div class="ic"><i class="fa-solid fa-box-open" aria-hidden="true"></i></div><b>Get a robot</b><span>Curated kits with parts lists, tested settings and build guides, and ready-made bots that arrive paired to your account.</span><div class="chips"><span>Rover kits</span><span>Telepresence bots</span><span>Pan-tilt cameras</span><span>Robot arms</span></div></div>++ <div class="card big"><div class="ic"><i class="fa-solid fa-box-open" aria-hidden="true"></i></div><b>Get a robot</b><span>Curated kits with parts lists, tested settings and build guides, and ready-made bots that arrive paired to your account. The first one on OpenVibe.Bot is the Adeept 4WD Smart Car for Raspberry Pi.</span><div class="chips"><span>Adeept 4WD Smart Car (Raspberry Pi)</span><span>Rover kits</span><span>Telepresence bots</span><span>Pan-tilt cameras</span><span>Robot arms</span></div></div><div class="card big"><div class="ic"><i class="fa-solid fa-screwdriver-wrench" aria-hidden="true"></i></div><b>Bring your own</b><span>Anything with motors, a camera or sensors. Install the OpenVibe device agent or add the library, and your robot shows up in the panel.</span><div class="chips"><span>Raspberry Pi and Linux boards</span><span>ESP32</span><span>ROS 2</span><span>Android phones</span><span>ONVIF and RTSP cameras</span><span>Serial motor boards</span></div></div></div></section>@@@ -199,6 +210,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo</section>++<section class="meanwhile"><h2>Stream it, record it, connect it</h2><p class="lead2">Optional, one toggle each. Your robot does not need an audience to be useful.</p>@@@ -214,6 +226,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo<h2>Questions</h2><details><summary>Do I need to open ports on my router?</summary><p>No. The robot connects out to OpenVibe, and video and controls travel over WebRTC, so it works behind ordinary home and mobile networks.</p></details><details><summary>Is it only for streaming?</summary><p>No. Streaming is optional. Bot is a control panel for your robot first: drive it, check on it, share it and automate it.</p></details>++ <details><summary>Which robot comes first?</summary><p>The Adeept 4WD Smart Car Kit for Raspberry Pi: four motors, a pan-tilt camera, distance and line sensors, lights and a buzzer. OpenVibe's device agent drives it directly, so its own open control port never has to be exposed.</p></details><details><summary>What hardware works?</summary><p>A Raspberry Pi or another Linux board, an ESP32, a ROS 2 robot, an Android phone, or an ONVIF or RTSP camera. The curated kits list exactly what to buy.</p></details><details><summary>How does it keep the robot safe?</summary><p>The device stops its motors by itself when commands or the connection stop. There is an emergency stop in the panel, limits on speed, range and time, and every command is logged.</p></details><details><summary>What will it cost?</summary><p>Controlling your own robot will not cost anything. Limits and any paid extras will be published before launch.</p></details>@@@ -1,6 +1,6 @@{"service": "bot",-- "release": "d6dcf5253182",++ "release": "0d72df741ce6","released_at": "2026-09-29T00:00:00.000Z","booted_at": null,"contracts_version": null,@@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}++.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}++.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}++.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}++.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}++.cands{list-style:none;display:grid;gap:6px}++.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}++.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}++.cands li span{text-align:right;font-variant-numeric:tabular-nums}++.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}++.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}++.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.card.big{padding:24px}.card.big b{font-size:17px}.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}@@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}--@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}++@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}</style></head>@@@ -1,6 +1,6 @@{"service": "coupons",-- "release": "35ee1dcacac8",++ "release": "8770f6d712a0","released_at": "2026-09-29T00:00:00.000Z","booted_at": null,"contracts_version": null,@@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}++.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}++.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}++.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}++.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}++.cands{list-style:none;display:grid;gap:6px}++.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}++.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}++.cands li span{text-align:right;font-variant-numeric:tabular-nums}++.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}++.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}++.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.card.big{padding:24px}.card.big b{font-size:17px}.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}@@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}--@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}++@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}</style></head>@@@ -1,6 +1,6 @@{"service": "deals",-- "release": "c650df3e7943",++ "release": "d020ff1ae119","released_at": "2026-09-29T00:00:00.000Z","booted_at": null,"contracts_version": null,@@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}++.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}++.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}++.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}++.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}++.cands{list-style:none;display:grid;gap:6px}++.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}++.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}++.cands li span{text-align:right;font-variant-numeric:tabular-nums}++.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}++.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}++.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.card.big{padding:24px}.card.big b{font-size:17px}.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}@@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}--@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}++@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}</style></head>@@@ -1,6 +1,6 @@{"service": "download",-- "release": "f31103a9b687",++ "release": "fe3036a1a92f","released_at": "2026-09-29T00:00:00.000Z","booted_at": null,"contracts_version": null,@@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}++.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}++.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}++.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}++.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}++.cands{list-style:none;display:grid;gap:6px}++.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}++.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}++.cands li span{text-align:right;font-variant-numeric:tabular-nums}++.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}++.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}++.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.card.big{padding:24px}.card.big b{font-size:17px}.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}@@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}--@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}++@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}</style></head>@@@ -1,6 +1,6 @@{"service": "events",-- "release": "775d8a75ec2d",++ "release": "215c667caeec","released_at": "2026-09-29T00:00:00.000Z","booted_at": null,"contracts_version": null,@@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}++.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}++.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}++.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}++.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}++.cands{list-style:none;display:grid;gap:6px}++.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}++.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}++.cands li span{text-align:right;font-variant-numeric:tabular-nums}++.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}++.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}++.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.card.big{padding:24px}.card.big b{font-size:17px}.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}@@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}--@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}++@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}</style></head>@@@ -1,6 +1,6 @@{"service": "food",-- "release": "33fe172f4ba8",++ "release": "f10c97817980","released_at": "2026-09-29T00:00:00.000Z","booted_at": null,"contracts_version": null,@@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}++.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}++.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}++.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}++.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}++.cands{list-style:none;display:grid;gap:6px}++.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}++.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}++.cands li span{text-align:right;font-variant-numeric:tabular-nums}++.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}++.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}++.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.card.big{padding:24px}.card.big b{font-size:17px}.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}@@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}--@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}++@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}</style></head>@@@ -1,6 +1,6 @@{"service": "help",-- "release": "ff05ba62a0a6",++ "release": "a22dfa6141ae","released_at": "2026-09-29T00:00:00.000Z","booted_at": null,"contracts_version": null,@@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}++.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}++.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}++.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}++.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}++.cands{list-style:none;display:grid;gap:6px}++.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}++.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}++.cands li span{text-align:right;font-variant-numeric:tabular-nums}++.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}++.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}++.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.card.big{padding:24px}.card.big b{font-size:17px}.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}@@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}--@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}++@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}</style></head>@@@ -1,6 +1,6 @@{"service": "homes",-- "release": "b7b52e6c88f7",++ "release": "6de124d8b681","released_at": "2026-09-29T00:00:00.000Z","booted_at": null,"contracts_version": null,@@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}++.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}++.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}++.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}++.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}++.cands{list-style:none;display:grid;gap:6px}++.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}++.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}++.cands li span{text-align:right;font-variant-numeric:tabular-nums}++.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}++.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}++.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.card.big{padding:24px}.card.big b{font-size:17px}.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}@@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}--@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}++@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}</style></head>@@@ -1,6 +1,6 @@{"service": "host",-- "release": "073bff41498e",++ "release": "2233fb7572a6","released_at": "2026-09-29T00:00:00.000Z","booted_at": null,"contracts_version": null,@@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}++.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}++.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}++.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}++.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}++.cands{list-style:none;display:grid;gap:6px}++.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}++.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}++.cands li span{text-align:right;font-variant-numeric:tabular-nums}++.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}++.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}++.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.card.big{padding:24px}.card.big b{font-size:17px}.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}@@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}--@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}++@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}</style></head>@@@ -1,6 +1,6 @@{"service": "news",-- "release": "ed41915d231f",++ "release": "afad07684f23","released_at": "2026-09-29T00:00:00.000Z","booted_at": null,"contracts_version": null,@@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}++.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}++.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}++.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}++.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}++.cands{list-style:none;display:grid;gap:6px}++.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}++.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}++.cands li span{text-align:right;font-variant-numeric:tabular-nums}++.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}++.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}++.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.card.big{padding:24px}.card.big b{font-size:17px}.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}@@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}--@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}++@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}</style></head>@@@ -1,6 +1,6 @@{"service": "pics",-- "release": "e72016bc0394",++ "release": "35f8193c0d26","released_at": "2026-09-29T00:00:00.000Z","booted_at": null,"contracts_version": null,@@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}++.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}++.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}++.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}++.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}++.cands{list-style:none;display:grid;gap:6px}++.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}++.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}++.cands li span{text-align:right;font-variant-numeric:tabular-nums}++.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}++.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}++.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.card.big{padding:24px}.card.big b{font-size:17px}.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}@@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}--@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}++@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}</style></head>@@@ -1,6 +1,6 @@{"service": "quest",-- "release": "61a9d8435854",++ "release": "4eba62984a98","released_at": "2026-09-29T00:00:00.000Z","booted_at": null,"contracts_version": null,@@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}++.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}++.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}++.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}++.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}++.cands{list-style:none;display:grid;gap:6px}++.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}++.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}++.cands li span{text-align:right;font-variant-numeric:tabular-nums}++.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}++.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}++.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.card.big{padding:24px}.card.big b{font-size:17px}.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}@@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}--@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}++@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}</style></head>@@@ -1,6 +1,6 @@{"service": "rent",-- "release": "c4da9315548d",++ "release": "98a920e4ebb8","released_at": "2026-09-29T00:00:00.000Z","booted_at": null,"contracts_version": null,@@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}++.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}++.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}++.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}++.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}++.cands{list-style:none;display:grid;gap:6px}++.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}++.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}++.cands li span{text-align:right;font-variant-numeric:tabular-nums}++.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}++.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}++.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.card.big{padding:24px}.card.big b{font-size:17px}.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}@@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}--@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}++@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}</style></head>@@@ -1,6 +1,6 @@{"service": "reviews",-- "release": "d33908ce7111",++ "release": "7aabc2d9e18e","released_at": "2026-09-29T00:00:00.000Z","booted_at": null,"contracts_version": null,@@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}++.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}++.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}++.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}++.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}++.cands{list-style:none;display:grid;gap:6px}++.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}++.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}++.cands li span{text-align:right;font-variant-numeric:tabular-nums}++.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}++.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}++.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.card.big{padding:24px}.card.big b{font-size:17px}.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}@@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}--@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}++@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}</style></head>@@@ -1,6 +1,6 @@{"service": "run",-- "release": "685bc59d6098",++ "release": "5f1846f79623","released_at": "2026-09-29T00:00:00.000Z","booted_at": null,"contracts_version": null,@@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}++.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}++.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}++.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}++.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}++.cands{list-style:none;display:grid;gap:6px}++.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}++.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}++.cands li span{text-align:right;font-variant-numeric:tabular-nums}++.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}++.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}++.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.card.big{padding:24px}.card.big b{font-size:17px}.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}@@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}--@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}++@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}</style></head>@@@ -1,6 +1,6 @@{"service": "services",-- "release": "3c4ff0411564",++ "release": "8d2fa89ea9e3","released_at": "2026-09-29T00:00:00.000Z","booted_at": null,"contracts_version": null,@@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}++.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}++.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}++.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}++.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}++.cands{list-style:none;display:grid;gap:6px}++.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}++.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}++.cands li span{text-align:right;font-variant-numeric:tabular-nums}++.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}++.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}++.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.card.big{padding:24px}.card.big b{font-size:17px}.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}@@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}--@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}++@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}</style></head>@@@ -1,6 +1,6 @@{"service": "space",-- "release": "48f1d864bd53",++ "release": "bce11705589a","released_at": "2026-09-29T00:00:00.000Z","booted_at": null,"contracts_version": null,@@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}++.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}++.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}++.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}++.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}++.cands{list-style:none;display:grid;gap:6px}++.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}++.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}++.cands li span{text-align:right;font-variant-numeric:tabular-nums}++.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}++.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}++.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.card.big{padding:24px}.card.big b{font-size:17px}.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}@@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}--@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}++@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}</style></head>@@@ -1,6 +1,6 @@{"service": "tips",-- "release": "bbdd22624542",++ "release": "ef1de815fca3","released_at": "2026-09-29T00:00:00.000Z","booted_at": null,"contracts_version": null,@@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}++.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}++.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}++.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}++.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}++.cands{list-style:none;display:grid;gap:6px}++.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}++.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}++.cands li span{text-align:right;font-variant-numeric:tabular-nums}++.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}++.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}++.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.card.big{padding:24px}.card.big b{font-size:17px}.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}@@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}--@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}++@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}</style></head>@@@ -1,6 +1,6 @@{"service": "trade",-- "release": "93c7a5251945",++ "release": "7df1bf9642b6","released_at": "2026-09-29T00:00:00.000Z","booted_at": null,"contracts_version": null,@@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}++.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}++.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}++.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}++.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}++.cands{list-style:none;display:grid;gap:6px}++.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}++.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}++.cands li span{text-align:right;font-variant-numeric:tabular-nums}++.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}++.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}++.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.card.big{padding:24px}.card.big b{font-size:17px}.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}@@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}--@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}++@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}</style></head>@@@ -1,6 +1,6 @@{"service": "video",-- "release": "e9c38e4e184a",++ "release": "9ee86614f867","released_at": "2026-09-29T00:00:00.000Z","booted_at": null,"contracts_version": null,@@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}++.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}++.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}++.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}++.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}++.cands{list-style:none;display:grid;gap:6px}++.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}++.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}++.cands li span{text-align:right;font-variant-numeric:tabular-nums}++.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}++.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}++.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.card.big{padding:24px}.card.big b{font-size:17px}.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}@@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}--@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}++@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}</style></head>@@@ -1,6 +1,6 @@{"service": "vip",-- "release": "3cf1ce50fcfa",++ "release": "a39b685cc155","released_at": "2026-09-29T00:00:00.000Z","booted_at": null,"contracts_version": null,@@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}++.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}++.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}++.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}++.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}++.cands{list-style:none;display:grid;gap:6px}++.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}++.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}++.cands li span{text-align:right;font-variant-numeric:tabular-nums}++.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}++.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}++.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.card.big{padding:24px}.card.big b{font-size:17px}.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}@@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}--@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}++@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}</style></head>@@@ -1,6 +1,6 @@{"service": "watch",-- "release": "db3af1fe5690",++ "release": "520b6134c006","released_at": "2026-09-29T00:00:00.000Z","booted_at": null,"contracts_version": null,@@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}++.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}++.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}++.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}++.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}++.cands{list-style:none;display:grid;gap:6px}++.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}++.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}++.cands li span{text-align:right;font-variant-numeric:tabular-nums}++.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}++.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}++.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.card.big{padding:24px}.card.big b{font-size:17px}.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}@@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}--@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}++@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}</style></head>@@@ -1,6 +1,6 @@{"service": "website",-- "release": "7ed1a86c7726",++ "release": "c470104088ba","released_at": "2026-09-29T00:00:00.000Z","booted_at": null,"contracts_version": null,@@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}++.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}++.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}++.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}++.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}++.cands{list-style:none;display:grid;gap:6px}++.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}++.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}++.cands li span{text-align:right;font-variant-numeric:tabular-nums}++.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}++.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}++.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.card.big{padding:24px}.card.big b{font-size:17px}.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}@@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}--@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}++@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}</style></head>@@@ -1,6 +1,6 @@{"service": "realtime",-- "release": "b271aa178d7e",++ "release": "0221dfe18e0e","released_at": "2026-09-29T00:00:00.000Z","booted_at": null,"contracts_version": null,@@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}++.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}++.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}++.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}++.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}++.cands{list-style:none;display:grid;gap:6px}++.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}++.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}++.cands li span{text-align:right;font-variant-numeric:tabular-nums}++.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}++.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}++.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.card.big{padding:24px}.card.big b{font-size:17px}.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}@@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}--@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}++@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}.live .sum{font-size:14px;color:var(--text-secondary);margin-bottom:14px;line-height:1.6}.live .sum b{color:var(--text-primary)}@@@ -1,6 +1,6 @@{"service": "status",-- "release": "e2fecfa09c74",++ "release": "9b981c0c3e79","released_at": "2026-09-29T00:00:00.000Z","booted_at": null,"contracts_version": null,@@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}++.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}++.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}++.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}++.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}++.cands{list-style:none;display:grid;gap:6px}++.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}++.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}++.cands li span{text-align:right;font-variant-numeric:tabular-nums}++.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}++.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}++.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.card.big{padding:24px}.card.big b{font-size:17px}.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}@@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}--@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}++@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}</style></head>@@@ -1,6 +1,6 @@{"service": "themes",-- "release": "9bc65bb6a1b1",++ "release": "b6662abd3bc6","released_at": "2026-09-29T00:00:00.000Z","booted_at": null,"contracts_version": null,@@@ -1331,8 +1331,9 @@{"icon": "fa-box-open","title": "Get a robot",-- "text": "Curated kits with parts lists, tested settings and build guides, and ready-made bots that arrive paired to your account.",++ "text": "Curated kits with parts lists, tested settings and build guides, and ready-made bots that arrive paired to your account. The first one on OpenVibe.Bot is the Adeept 4WD Smart Car for Raspberry Pi.","chips": [++ "Adeept 4WD Smart Car (Raspberry Pi)","Rover kits","Telepresence bots","Pan-tilt cameras",@@@ -1427,6 +1428,10 @@"Is it only for streaming?","No. Streaming is optional. Bot is a control panel for your robot first: drive it, check on it, share it and automate it."],++ [++ "Which robot comes first?",++ "The Adeept 4WD Smart Car Kit for Raspberry Pi: four motors, a pan-tilt camera, distance and line sensors, lights and a buzzer. OpenVibe's device agent drives it directly, so its own open control port never has to be exposed."++ ],["What hardware works?","A Raspberry Pi or another Linux board, an ESP32, a ROS 2 robot, an Android phone, or an ONVIF or RTSP camera. The curated kits list exactly what to buy."@@@ -1489,8 +1494,8 @@"name": "OpenVibe.Actor","icon": "fa-user-astronaut","accent": "#a78bfa",-- "tagline": "Your agent in the cloud, connected to everything OpenVibe.",-- "description": "OpenVibe.Actor gives you an AI agent that lives in OpenVibe's cloud and works for you around the clock. It remembers, runs on schedules and triggers, uses every OpenVibe product as a tool, browses and codes in a sandbox, and asks before it does anything that matters. Talk to it from any OpenVibe site, in chat, or from your own apps.",++ "tagline": "One API for every AI agent. The right one for each task.",++ "description": "OpenVibe.Actor sends each task to the agent system best suited to it, from hosted agent platforms to open-source runtimes, coding agents and OpenVibe's own, and balances them live on price, speed and success. Pick a mode (cheapest, balanced, best, fastest or private), set a budget, and get a checked result with its cost and the reason for every choice. On top of it, your own always-on agents work across the whole OpenVibe network.","pillars": [["Your agents",@@@ -1521,8 +1526,8 @@"The API and SDK agents are built on."]],-- "keywords": "cloud ai agent, hosted ai agent, personal ai agent, ai agent with memory, autonomous ai assistant, ai agent platform, open source ai agent, mcp server, ai agent approvals",-- "launch": "agent accounts with delegated permissions on OpenVibe.Network and the Actor service",++ "keywords": "ai agent router, openrouter for agents, agent api, route tasks to ai agents, cheapest ai agent, ai agent comparison, hosted ai agent, cloud ai agent, personal ai agent, mcp server",++ "launch": "the task router with its first agent adapters, then personal agents on OpenVibe.Network accounts","noRepo": true,"vision": {"badge": "being built",@@@ -1532,73 +1537,181 @@"fa-circle-nodes"],"viz": {-- "kind": "agent",-- "name": "Nova",-- "role": "stream co-host",-- "state": "always on",-- "icon": "fa-user-astronaut",-- "steps": [-- "Watched tonight's stream and marked 3 highlights",-- "Clipped the best one on OpenVibe.Media",-- "Drafted a post for your blog with the clip"++ "kind": "router",++ "budget": "budget 50¢",++ "task": "Research five competitors of my shop and write a one-page brief with sources.",++ "modes": [++ "Cheapest",++ "Balanced",++ "Best",++ "Fastest",++ "Private"++ ],++ "mode": "Balanced",++ "candidates": [++ {++ "icon": "fa-circle-nodes",++ "name": "OpenVibe runtime",++ "cost": "6¢",++ "time": "3 min",++ "success": "92%",++ "pick": true++ },++ {++ "icon": "fa-cloud",++ "name": "Hosted frontier agent",++ "cost": "31¢",++ "time": "2 min",++ "success": "95%"++ },++ {++ "icon": "fa-code",++ "name": "Coding agent",++ "cost": "12¢",++ "time": "4 min",++ "success": "81%"++ },++ {++ "icon": "fa-lock",++ "name": "Open model on OpenVibe",++ "cost": "1¢",++ "time": "7 min",++ "success": "74%"++ }],-- "ask": "Publish the post on openvibe.blog?",-- "caption": "Design preview of an agent at work",-- "label": "Design preview: an agent's activity feed ending in a request for approval"++ "why": "Meets this task's quality bar at the lowest expected cost; a second model family checks the brief before you get it.",++ "caption": "Design preview; the numbers are illustrative",++ "label": "Design preview: a task routed across four agent systems with cost, time and success estimates, the balanced mode selected"},-- "stepsTitle": "Start in a minute",-- "stepsLead": "Describe what you want or start from a template. Change anything later.",++ "stepsTitle": "How a task runs",++ "stepsLead": "Send a task from the site, the API or any OpenVibe app. Actor does the rest.","steps": [[-- "Create an agent",-- "Pick a template or describe the job in your own words. Choose its model and its personality."++ "Describe the task",++ "Say what you want done, pick a mode and set a budget. Attach files or give it a robot, a site or a stream to work with."],[-- "Decide what it may do",-- "Grant it tools one by one. Anything with consequences, like publishing, spending or moving a robot, waits for your approval."++ "Actor picks the agent",++ "It weighs every agent system on live price, speed and success for this kind of task, picks one, and tells you why."],[-- "Let it work",-- "It runs in the cloud on schedules and triggers, and you can reach it from any OpenVibe site."++ "Checked, then delivered",++ "A different model checks the result; a failed check moves the task to a stronger agent. You see the cost to the cent."]],-- "featuresTitle": "What your agent can do",-- "featuresLead": "An agent is only as useful as what it can reach. Yours can reach the whole network.",++ "featuresTitle": "Modes",++ "featuresLead": "Tell Actor what matters most. It balances the rest.","features": [[-- "fa-cloud",-- "Always on",-- "Runs in OpenVibe's cloud around the clock. Close your laptop; it keeps going."++ "fa-coins",++ "Cheapest",++ "The lowest expected cost that still meets the task's quality bar."],[-- "fa-circle-nodes",-- "Uses the whole network",-- "Live, Chat, Blog, Wiki, Community, Tools, Media, Host, Bot and more, each through its own API."++ "fa-scale-balanced",++ "Balanced",++ "The default: cost, quality and speed weighed together."],[-- "fa-window-maximize",-- "Browses and codes",-- "A sandboxed browser and code runner for work outside the network."++ "fa-trophy",++ "Best",++ "The highest chance of a right answer first time; cost comes second."],[-- "fa-brain",-- "Remembers",-- "Long-term memory you can read, edit and wipe."++ "fa-bolt",++ "Fastest",++ "The shortest time to a checked result."],[-- "fa-hand",-- "Asks first",-- "An approval inbox, a full activity log, spending limits and a kill switch."++ "fa-lock",++ "Private",++ "Only agents that keep your data on OpenVibe: its own runtime and open models on its hardware."],[-- "fa-shuffle",-- "Any model",-- "Routed through OpenVibe.AI: hosted, open or local models, or your own key."++ "fa-wallet",++ "Budgets",++ "A hard limit per task and per day. Actor never goes over it."]],++ "more": [++ {++ "id": "routes",++ "title": "What it routes to",++ "lead": "Every agent system worth using, behind one API, one key and one bill.",++ "cards": [++ [++ "fa-circle-nodes",++ "OpenVibe's own runtime",++ "Uses every OpenVibe product as a tool, with models chosen by OpenVibe.AI."++ ],++ [++ "fa-cloud",++ "Hosted agent platforms",++ "Agent platforms from companies like OpenAI and Anthropic, with their browsers, code runners and search."++ ],++ [++ "fa-code",++ "Coding agents",++ "For tasks that are really code: fixes, features, reviews and tests."++ ],++ [++ "fa-server",++ "Open-source agents",++ "Open runtimes and open models on OpenVibe's own hardware: the Private mode."++ ],++ [++ "fa-key",++ "Your own keys",++ "Bring a key for any platform and pay it directly; Actor still routes, checks and explains."++ ],++ [++ "fa-plug-circle-plus",++ "New ones, fast",++ "A new agent platform is one adapter. The day it lands, every app and agent can use it."++ ]++ ]++ },++ {++ "title": "Balanced live, explained always",++ "lead": "Choices come from what actually happens, not from marketing pages.",++ "cards": [++ [++ "fa-chart-line",++ "Live signals",++ "Price, speed, success rate and outages per agent system and per kind of task, updated from real runs."++ ],++ [++ "fa-arrows-rotate",++ "Failover",++ "When an agent system slows down or fails, tasks move to the next best one at once."++ ],++ [++ "fa-list-check",++ "Checked results",++ "Cheap first, then stronger agents only when a check fails: you pay for strength only when a task needs it."++ ],++ [++ "fa-magnifying-glass-chart",++ "Public rankings",++ "Success, cost and time per agent system for each kind of task, from real traffic, with dates.",++ null++ ],++ [++ "fa-receipt",++ "Every choice explained",++ "Which agent ran, why it won, what else was considered and what it cost."++ ],++ [++ "fa-user-astronaut",++ "Your agents, on top",++ "Always-on agents with memory, schedules and approvals; every task they take goes through the router."++ ]++ ]++ }++ ],"templates": {-- "title": "Start from a template",-- "lead": "Each one is a starting point you can change.",++ "title": "Start an agent from a template",++ "lead": "Each one is a starting point you can change, and each routes its work through Actor.","items": [["fa-tower-broadcast",@@@ -1627,7 +1740,7 @@]},"connectTitle": "Reachable everywhere",-- "connectLead": "Your agent is part of the network, not a separate app.",++ "connectLead": "Actor is part of the network, not a separate app.","connect": [["fa-bars",@@@ -1643,13 +1756,13 @@["fa-robot","With your robots",-- "Give it a robot on OpenVibe.Bot to patrol, check on or perform with, with your approval.",++ "Give an agent a robot on OpenVibe.Bot to patrol, check on or perform with, with your approval.","https://openvibe.bot"],["fa-plug","From your own apps",-- "An API, webhooks and an MCP server, so other assistants can use OpenVibe tools and talk to your agent.",++ "An API, webhooks and an MCP server, so other assistants can hand tasks to Actor.","https://openvibe.codes"]],@@@ -1657,24 +1770,28 @@},"faq": [[-- "How is this different from a chat assistant?",-- "It keeps working when you leave: it has memory, schedules and triggers, and it can act across OpenVibe with the permissions you give it."++ "Is this like OpenRouter?",++ "Yes, for agents: one API and one bill for many agent systems, with live prices and rankings. Actor routes whole tasks rather than single model calls, and it checks the results before you get them."++ ],++ [++ "Which agent systems does it use?",++ "OpenVibe's own runtime, hosted agent platforms from companies like OpenAI and Anthropic, coding agents, and open-source agents on OpenVibe's hardware. Each is an adapter, so new ones join quickly."],[-- "Can it do things without asking?",-- "Only what you allow. You grant each tool, and anything with consequences waits for your approval. Every action is logged, and you can stop an agent at any time."++ "How does it choose?",++ "For each kind of task it compares price, speed, success rate and current health across agent systems, then applies your mode and budget. Every choice is recorded and explained."],[-- "Which AI models does it use?",-- "Any model OpenVibe.AI routes to, including open and local models, or your own API key."++ "Can I keep my data on OpenVibe?",++ "Yes. Private mode uses only OpenVibe's own runtime and open models on its own hardware."],[-- "Can other apps use my agent?",-- "Yes: an API, webhooks and an MCP server connect it to other tools and assistants."++ "Can it act without asking?",++ "Only as far as you allow. Anything with consequences, like publishing, spending or moving a robot, waits for your approval, and every action is logged."],["What will it cost?",-- "You will be able to start without paying, within limits published before launch; heavier use and bigger models will be paid."++ "You will be able to start without paying, within limits published before launch; bigger tasks and stronger agents will be paid, with the cost shown per task."]]},
@@ -143,6 +143,16 @@ function visionViz(v) {
@@ -143,6 +143,16 @@ function visionViz(v) {
<figcaption>${esc(z.caption)}</figcaption>
<figcaption>${esc(z.caption)}</figcaption>
</figure>`;
</figure>`;
}
}
+ if (z.kind === 'router') {
+ return `<figure class="viz" aria-label="${esc(z.label)}">
+ <div class="viz-top"><span class="av"><i class="fa-solid fa-route" aria-hidden="true"></i></span><b>New task</b><span class="lat"><i class="fa-solid fa-wallet" aria-hidden="true"></i> ${esc(z.budget)}</span></div>
+ <p class="task">${esc(z.task)}</p>
+ <div class="modes" aria-hidden="true">${(z.modes || []).map((m) => `<span${m === z.mode ? ' class="on"' : ''}>${esc(m)}</span>`).join('')}</div>
+ <ol class="cands" aria-hidden="true">${(z.candidates || []).map((c) => `<li${c.pick ? ' class="pick"' : ''}><i class="fa-solid ${esc(c.icon)}"></i><b>${esc(c.name)}</b><span>${esc(c.cost)}</span><span>${esc(c.time)}</span><span>${esc(c.success)}</span>${c.pick ? '<em>picked</em>' : ''}</li>`).join('')}</ol>
+ <p class="why"><i class="fa-solid fa-circle-info" aria-hidden="true"></i> ${esc(z.why)}</p>
+ <figcaption>${esc(z.caption)}</figcaption>
+ </figure>`;
+ }
return '';
return '';
}
}
function vision(site) {
function vision(site) {
@@ -173,6 +183,14 @@ ${v.choices ? `
@@ -173,6 +183,14 @@ ${v.choices ? `
${cards(v.features)}
${cards(v.features)}
</div>
</div>
</section>
</section>
+${(v.more || []).map((m) => `
+ <section${m.id ? ` id="${esc(m.id)}"` : ''}>
+ <h2>${esc(m.title)}</h2>
+ <p class="lead2">${esc(m.lead)}</p>
+ <div class="grid three">
+ ${cards(m.cards)}
+ </div>
+ </section>`).join('')}
${v.templates ? `
${v.templates ? `
<section>
<section>
<h2>${esc(v.templates.title)}</h2>
<h2>${esc(v.templates.title)}</h2>
@@ -350,6 +368,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -350,6 +368,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
+.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}
+.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
+.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}
+.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}
+.cands{list-style:none;display:grid;gap:6px}
+.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}
+.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.cands li span{text-align:right;font-variant-numeric:tabular-nums}
+.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}
+.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}
+.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.card.big{padding:24px}.card.big b{font-size:17px}
.card.big{padding:24px}.card.big b{font-size:17px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
@@ -357,7 +386,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -357,7 +386,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
-@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}
+@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
${site.statusApi ? STATUS_CSS : ''}</style>
${site.statusApi ? STATUS_CSS : ''}</style>
</head>
</head>
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
+.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}
+.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
+.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}
+.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}
+.cands{list-style:none;display:grid;gap:6px}
+.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}
+.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.cands li span{text-align:right;font-variant-numeric:tabular-nums}
+.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}
+.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}
+.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.card.big{padding:24px}.card.big b{font-size:17px}
.card.big{padding:24px}.card.big b{font-size:17px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
-@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}
+@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
</style>
</style>
</head>
</head>
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"service": "admin",
"service": "admin",
- "release": "4e2dec5e2993",
+ "release": "d3d93241fa2c",
"released_at": "2026-09-29T00:00:00.000Z",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"booted_at": null,
"contracts_version": null,
"contracts_version": null,
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
+.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}
+.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
+.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}
+.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}
+.cands{list-style:none;display:grid;gap:6px}
+.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}
+.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.cands li span{text-align:right;font-variant-numeric:tabular-nums}
+.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}
+.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}
+.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.card.big{padding:24px}.card.big b{font-size:17px}
.card.big{padding:24px}.card.big b{font-size:17px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
-@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}
+@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
</style>
</style>
</head>
</head>
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"service": "ai",
"service": "ai",
- "release": "7d2d151a6842",
+ "release": "7438b3f419e0",
"released_at": "2026-09-29T00:00:00.000Z",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"booted_at": null,
"contracts_version": null,
"contracts_version": null,
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
+.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}
+.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
+.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}
+.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}
+.cands{list-style:none;display:grid;gap:6px}
+.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}
+.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.cands li span{text-align:right;font-variant-numeric:tabular-nums}
+.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}
+.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}
+.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.card.big{padding:24px}.card.big b{font-size:17px}
.card.big{padding:24px}.card.big b{font-size:17px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
-@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}
+@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
</style>
</style>
</head>
</head>
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"service": "ai",
"service": "ai",
- "release": "d9c70520ecef",
+ "release": "7ee74be90e8a",
"released_at": "2026-09-29T00:00:00.000Z",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"booted_at": null,
"contracts_version": null,
"contracts_version": null,
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
+.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}
+.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
+.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}
+.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}
+.cands{list-style:none;display:grid;gap:6px}
+.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}
+.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.cands li span{text-align:right;font-variant-numeric:tabular-nums}
+.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}
+.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}
+.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.card.big{padding:24px}.card.big b{font-size:17px}
.card.big{padding:24px}.card.big b{font-size:17px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
-@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}
+@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
</style>
</style>
</head>
</head>
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"service": "api",
"service": "api",
- "release": "4dc46ad3c820",
+ "release": "57d0965a86a0",
"released_at": "2026-09-29T00:00:00.000Z",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"booted_at": null,
"contracts_version": null,
"contracts_version": null,
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
+.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}
+.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
+.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}
+.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}
+.cands{list-style:none;display:grid;gap:6px}
+.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}
+.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.cands li span{text-align:right;font-variant-numeric:tabular-nums}
+.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}
+.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}
+.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.card.big{padding:24px}.card.big b{font-size:17px}
.card.big{padding:24px}.card.big b{font-size:17px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
-@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}
+@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
</style>
</style>
</head>
</head>
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"service": "auth",
"service": "auth",
- "release": "2d9159294e65",
+ "release": "6eec453e0986",
"released_at": "2026-09-29T00:00:00.000Z",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"booted_at": null,
"contracts_version": null,
"contracts_version": null,
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
+.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}
+.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
+.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}
+.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}
+.cands{list-style:none;display:grid;gap:6px}
+.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}
+.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.cands li span{text-align:right;font-variant-numeric:tabular-nums}
+.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}
+.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}
+.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.card.big{padding:24px}.card.big b{font-size:17px}
.card.big{padding:24px}.card.big b{font-size:17px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
-@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}
+@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
</style>
</style>
</head>
</head>
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"service": "stream",
"service": "stream",
- "release": "12285800442e",
+ "release": "d89063824a8f",
"released_at": "2026-09-29T00:00:00.000Z",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"booted_at": null,
"contracts_version": null,
"contracts_version": null,
@@ -3,9 +3,9 @@
@@ -3,9 +3,9 @@
<head>
<head>
<meta charset="utf-8">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="viewport" content="width=device-width, initial-scale=1">
-<title>OpenVibe.Actor — Your agent in the cloud, connected to everything OpenVibe.</title>
-<meta name="description" content="OpenVibe.Actor gives you an AI agent that lives in OpenVibe's cloud and works for you around the clock. It remembers, runs on schedules and triggers, uses every OpenVibe product as a tool, browses and codes in a sandbox, and asks before it does anything that matters. Talk to it from any OpenVibe site, in chat, or from your own apps.">
-<meta name="keywords" content="cloud ai agent, hosted ai agent, personal ai agent, ai agent with memory, autonomous ai assistant, ai agent platform, open source ai agent, mcp server, ai agent approvals">
+<title>OpenVibe.Actor — One API for every AI agent. The right one for each task.</title>
+<meta name="description" content="OpenVibe.Actor sends each task to the agent system best suited to it, from hosted agent platforms to open-source runtimes, coding agents and OpenVibe's own, and balances them live on price, speed and success. Pick a mode (cheapest, balanced, best, fastest or private), set a budget, and get a checked result with its cost and the reason for every choice. On top of it, your own always-on agents work across the whole OpenVibe network.">
+<meta name="keywords" content="ai agent router, openrouter for agents, agent api, route tasks to ai agents, cheapest ai agent, ai agent comparison, hosted ai agent, cloud ai agent, personal ai agent, mcp server">
<meta name="robots" content="index, follow, max-image-preview:large">
<meta name="robots" content="index, follow, max-image-preview:large">
<meta name="theme-color" content="#a78bfa">
<meta name="theme-color" content="#a78bfa">
<link rel="canonical" href="https://openvibe.actor/">
<link rel="canonical" href="https://openvibe.actor/">
@@ -16,15 +16,15 @@
@@ -16,15 +16,15 @@
<meta property="og:type" content="website">
<meta property="og:type" content="website">
<meta property="og:site_name" content="OpenVibe.Actor">
<meta property="og:site_name" content="OpenVibe.Actor">
<meta property="og:url" content="https://openvibe.actor/">
<meta property="og:url" content="https://openvibe.actor/">
-<meta property="og:title" content="OpenVibe.Actor — Your agent in the cloud, connected to everything OpenVibe.">
-<meta property="og:description" content="OpenVibe.Actor gives you an AI agent that lives in OpenVibe's cloud and works for you around the clock. It remembers, runs on schedules and triggers, uses every OpenVibe product as a tool, browses and codes in a sandbox, and asks before it does anything that matters. Talk to it from any OpenVibe site, in chat, or from your own apps.">
+<meta property="og:title" content="OpenVibe.Actor — One API for every AI agent. The right one for each task.">
+<meta property="og:description" content="OpenVibe.Actor sends each task to the agent system best suited to it, from hosted agent platforms to open-source runtimes, coding agents and OpenVibe's own, and balances them live on price, speed and success. Pick a mode (cheapest, balanced, best, fastest or private), set a budget, and get a checked result with its cost and the reason for every choice. On top of it, your own always-on agents work across the whole OpenVibe network.">
<meta property="og:image" content="https://openvibe.network/assets/logo-512.png">
<meta property="og:image" content="https://openvibe.network/assets/logo-512.png">
<meta property="og:image:alt" content="OpenVibe">
<meta property="og:image:alt" content="OpenVibe">
<meta name="twitter:card" content="summary">
<meta name="twitter:card" content="summary">
-<meta name="twitter:title" content="OpenVibe.Actor — Your agent in the cloud, connected to everything OpenVibe.">
-<meta name="twitter:description" content="OpenVibe.Actor gives you an AI agent that lives in OpenVibe's cloud and works for you around the clock. It remembers, runs on schedules and triggers, uses every OpenVibe product as a tool, browses and codes in a sandbox, and asks before it does anything that matters. Talk to it from any OpenVibe site, in chat, or from your own apps.">
+<meta name="twitter:title" content="OpenVibe.Actor — One API for every AI agent. The right one for each task.">
+<meta name="twitter:description" content="OpenVibe.Actor sends each task to the agent system best suited to it, from hosted agent platforms to open-source runtimes, coding agents and OpenVibe's own, and balances them live on price, speed and success. Pick a mode (cheapest, balanced, best, fastest or private), set a budget, and get a checked result with its cost and the reason for every choice. On top of it, your own always-on agents work across the whole OpenVibe network.">
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
-<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.actor/#site","url":"https://openvibe.actor/","name":"OpenVibe.Actor","description":"OpenVibe.Actor gives you an AI agent that lives in OpenVibe's cloud and works for you around the clock. It remembers, runs on schedules and triggers, uses every OpenVibe product as a tool, browses and codes in a sandbox, and asks before it does anything that matters. Talk to it from any OpenVibe site, in chat, or from your own apps.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.actor/#page","url":"https://openvibe.actor/","name":"OpenVibe.Actor — Your agent in the cloud, connected to everything OpenVibe.","description":"OpenVibe.Actor gives you an AI agent that lives in OpenVibe's cloud and works for you around the clock. It remembers, runs on schedules and triggers, uses every OpenVibe product as a tool, browses and codes in a sandbox, and asks before it does anything that matters. Talk to it from any OpenVibe site, in chat, or from your own apps.","isPartOf":{"@id":"https://openvibe.actor/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Actor","item":"https://openvibe.actor/"}]}},{"@type":"FAQPage","@id":"https://openvibe.actor/#faq","mainEntity":[{"@type":"Question","name":"How is this different from a chat assistant?","acceptedAnswer":{"@type":"Answer","text":"It keeps working when you leave: it has memory, schedules and triggers, and it can act across OpenVibe with the permissions you give it."}},{"@type":"Question","name":"Can it do things without asking?","acceptedAnswer":{"@type":"Answer","text":"Only what you allow. You grant each tool, and anything with consequences waits for your approval. Every action is logged, and you can stop an agent at any time."}},{"@type":"Question","name":"Which AI models does it use?","acceptedAnswer":{"@type":"Answer","text":"Any model OpenVibe.AI routes to, including open and local models, or your own API key."}},{"@type":"Question","name":"Can other apps use my agent?","acceptedAnswer":{"@type":"Answer","text":"Yes: an API, webhooks and an MCP server connect it to other tools and assistants."}},{"@type":"Question","name":"What will it cost?","acceptedAnswer":{"@type":"Answer","text":"You will be able to start without paying, within limits published before launch; heavier use and bigger models will be paid."}}]}]}</script>
+<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.actor/#site","url":"https://openvibe.actor/","name":"OpenVibe.Actor","description":"OpenVibe.Actor sends each task to the agent system best suited to it, from hosted agent platforms to open-source runtimes, coding agents and OpenVibe's own, and balances them live on price, speed and success. Pick a mode (cheapest, balanced, best, fastest or private), set a budget, and get a checked result with its cost and the reason for every choice. On top of it, your own always-on agents work across the whole OpenVibe network.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.actor/#page","url":"https://openvibe.actor/","name":"OpenVibe.Actor — One API for every AI agent. The right one for each task.","description":"OpenVibe.Actor sends each task to the agent system best suited to it, from hosted agent platforms to open-source runtimes, coding agents and OpenVibe's own, and balances them live on price, speed and success. Pick a mode (cheapest, balanced, best, fastest or private), set a budget, and get a checked result with its cost and the reason for every choice. On top of it, your own always-on agents work across the whole OpenVibe network.","isPartOf":{"@id":"https://openvibe.actor/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Actor","item":"https://openvibe.actor/"}]}},{"@type":"FAQPage","@id":"https://openvibe.actor/#faq","mainEntity":[{"@type":"Question","name":"Is this like OpenRouter?","acceptedAnswer":{"@type":"Answer","text":"Yes, for agents: one API and one bill for many agent systems, with live prices and rankings. Actor routes whole tasks rather than single model calls, and it checks the results before you get them."}},{"@type":"Question","name":"Which agent systems does it use?","acceptedAnswer":{"@type":"Answer","text":"OpenVibe's own runtime, hosted agent platforms from companies like OpenAI and Anthropic, coding agents, and open-source agents on OpenVibe's hardware. Each is an adapter, so new ones join quickly."}},{"@type":"Question","name":"How does it choose?","acceptedAnswer":{"@type":"Answer","text":"For each kind of task it compares price, speed, success rate and current health across agent systems, then applies your mode and budget. Every choice is recorded and explained."}},{"@type":"Question","name":"Can I keep my data on OpenVibe?","acceptedAnswer":{"@type":"Answer","text":"Yes. Private mode uses only OpenVibe's own runtime and open models on its own hardware."}},{"@type":"Question","name":"Can it act without asking?","acceptedAnswer":{"@type":"Answer","text":"Only as far as you allow. Anything with consequences, like publishing, spending or moving a robot, waits for your approval, and every action is logged."}},{"@type":"Question","name":"What will it cost?","acceptedAnswer":{"@type":"Answer","text":"You will be able to start without paying, within limits published before launch; bigger tasks and stronger agents will be paid, with the cost shown per task."}}]}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
+.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}
+.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
+.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}
+.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}
+.cands{list-style:none;display:grid;gap:6px}
+.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}
+.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.cands li span{text-align:right;font-variant-numeric:tabular-nums}
+.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}
+.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}
+.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.card.big{padding:24px}.card.big b{font-size:17px}
.card.big{padding:24px}.card.big b{font-size:17px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
-@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}
+@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
</style>
</style>
</head>
</head>
@@ -142,77 +153,105 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -142,77 +153,105 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
<div class="mark"><i class="fa-solid fa-user-astronaut" aria-hidden="true"></i></div>
<div class="mark"><i class="fa-solid fa-user-astronaut" aria-hidden="true"></i></div>
<div class="badge"><span class="ov-mark" data-size="16" data-variant="actor"></span> Part of the OpenVibe network · <b>being built</b></div>
<div class="badge"><span class="ov-mark" data-size="16" data-variant="actor"></span> Part of the OpenVibe network · <b>being built</b></div>
<h1>OpenVibe<span class="d">.</span><span class="tld">Actor</span></h1>
<h1>OpenVibe<span class="d">.</span><span class="tld">Actor</span></h1>
- <div class="tag">Your agent in the cloud, connected to everything OpenVibe.</div>
- <p class="lead">OpenVibe.Actor gives you an AI agent that lives in OpenVibe's cloud and works for you around the clock. It remembers, runs on schedules and triggers, uses every OpenVibe product as a tool, browses and codes in a sandbox, and asks before it does anything that matters. Talk to it from any OpenVibe site, in chat, or from your own apps.</p>
+ <div class="tag">One API for every AI agent. The right one for each task.</div>
+ <p class="lead">OpenVibe.Actor sends each task to the agent system best suited to it, from hosted agent platforms to open-source runtimes, coding agents and OpenVibe's own, and balances them live on price, speed and success. Pick a mode (cheapest, balanced, best, fastest or private), set a budget, and get a checked result with its cost and the reason for every choice. On top of it, your own always-on agents work across the whole OpenVibe network.</p>
<div class="ctas">
<div class="ctas">
<a class="btn btn-primary" href="https://openvibe.network/login?return=https%3A%2F%2Fopenvibe.actor%2F"><i class="fa-solid fa-right-to-bracket"></i> Sign in with OpenVibe</a>
<a class="btn btn-primary" href="https://openvibe.network/login?return=https%3A%2F%2Fopenvibe.actor%2F"><i class="fa-solid fa-right-to-bracket"></i> Sign in with OpenVibe</a>
<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> See the network</a>
<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> See the network</a>
<a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a>
<a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a>
</div>
</div>
</div>
</div>
- <figure class="viz" aria-label="Design preview: an agent's activity feed ending in a request for approval">
- <div class="viz-top"><span class="av"><i class="fa-solid fa-user-astronaut" aria-hidden="true"></i></span><b>Nova</b><span class="muted">stream co-host</span><span class="lat"><i class="fa-solid fa-cloud" aria-hidden="true"></i> always on</span></div>
- <ol class="feed"><li><i class="fa-solid fa-circle-check" aria-hidden="true"></i><span>Watched tonight's stream and marked 3 highlights</span></li><li><i class="fa-solid fa-circle-check" aria-hidden="true"></i><span>Clipped the best one on OpenVibe.Media</span></li><li><i class="fa-solid fa-circle-check" aria-hidden="true"></i><span>Drafted a post for your blog with the clip</span></li>
- <li class="ask"><i class="fa-solid fa-hand" aria-hidden="true"></i><span>Publish the post on openvibe.blog?</span><span class="pills" aria-hidden="true"><span class="ok">Approve</span><span>Not yet</span></span></li></ol>
- <figcaption>Design preview of an agent at work</figcaption>
+ <figure class="viz" aria-label="Design preview: a task routed across four agent systems with cost, time and success estimates, the balanced mode selected">
+ <div class="viz-top"><span class="av"><i class="fa-solid fa-route" aria-hidden="true"></i></span><b>New task</b><span class="lat"><i class="fa-solid fa-wallet" aria-hidden="true"></i> budget 50¢</span></div>
+ <p class="task">Research five competitors of my shop and write a one-page brief with sources.</p>
+ <div class="modes" aria-hidden="true"><span>Cheapest</span><span class="on">Balanced</span><span>Best</span><span>Fastest</span><span>Private</span></div>
+ <ol class="cands" aria-hidden="true"><li class="pick"><i class="fa-solid fa-circle-nodes"></i><b>OpenVibe runtime</b><span>6¢</span><span>3 min</span><span>92%</span><em>picked</em></li><li><i class="fa-solid fa-cloud"></i><b>Hosted frontier agent</b><span>31¢</span><span>2 min</span><span>95%</span></li><li><i class="fa-solid fa-code"></i><b>Coding agent</b><span>12¢</span><span>4 min</span><span>81%</span></li><li><i class="fa-solid fa-lock"></i><b>Open model on OpenVibe</b><span>1¢</span><span>7 min</span><span>74%</span></li></ol>
+ <p class="why"><i class="fa-solid fa-circle-info" aria-hidden="true"></i> Meets this task's quality bar at the lowest expected cost; a second model family checks the brief before you get it.</p>
+ <figcaption>Design preview; the numbers are illustrative</figcaption>
</figure>
</figure>
</header>
</header>
<section id="what">
<section id="what">
- <h2>Start in a minute</h2>
- <p class="lead2">Describe what you want or start from a template. Change anything later.</p>
+ <h2>How a task runs</h2>
+ <p class="lead2">Send a task from the site, the API or any OpenVibe app. Actor does the rest.</p>
<ol class="steps">
<ol class="steps">
- <li><span class="n">1</span><b>Create an agent</b><span>Pick a template or describe the job in your own words. Choose its model and its personality.</span></li>
- <li><span class="n">2</span><b>Decide what it may do</b><span>Grant it tools one by one. Anything with consequences, like publishing, spending or moving a robot, waits for your approval.</span></li>
- <li><span class="n">3</span><b>Let it work</b><span>It runs in the cloud on schedules and triggers, and you can reach it from any OpenVibe site.</span></li>
+ <li><span class="n">1</span><b>Describe the task</b><span>Say what you want done, pick a mode and set a budget. Attach files or give it a robot, a site or a stream to work with.</span></li>
+ <li><span class="n">2</span><b>Actor picks the agent</b><span>It weighs every agent system on live price, speed and success for this kind of task, picks one, and tells you why.</span></li>
+ <li><span class="n">3</span><b>Checked, then delivered</b><span>A different model checks the result; a failed check moves the task to a stronger agent. You see the cost to the cent.</span></li>
</ol>
</ol>
</section>
</section>
<section>
<section>
- <h2>What your agent can do</h2>
- <p class="lead2">An agent is only as useful as what it can reach. Yours can reach the whole network.</p>
+ <h2>Modes</h2>
+ <p class="lead2">Tell Actor what matters most. It balances the rest.</p>
<div class="grid three">
<div class="grid three">
- <div class="card"><div class="ic"><i class="fa-solid fa-cloud" aria-hidden="true"></i></div><b>Always on</b><span>Runs in OpenVibe's cloud around the clock. Close your laptop; it keeps going.</span></div>
- <div class="card"><div class="ic"><i class="fa-solid fa-circle-nodes" aria-hidden="true"></i></div><b>Uses the whole network</b><span>Live, Chat, Blog, Wiki, Community, Tools, Media, Host, Bot and more, each through its own API.</span></div>
- <div class="card"><div class="ic"><i class="fa-solid fa-window-maximize" aria-hidden="true"></i></div><b>Browses and codes</b><span>A sandboxed browser and code runner for work outside the network.</span></div>
- <div class="card"><div class="ic"><i class="fa-solid fa-brain" aria-hidden="true"></i></div><b>Remembers</b><span>Long-term memory you can read, edit and wipe.</span></div>
- <div class="card"><div class="ic"><i class="fa-solid fa-hand" aria-hidden="true"></i></div><b>Asks first</b><span>An approval inbox, a full activity log, spending limits and a kill switch.</span></div>
- <div class="card"><div class="ic"><i class="fa-solid fa-shuffle" aria-hidden="true"></i></div><b>Any model</b><span>Routed through OpenVibe.AI: hosted, open or local models, or your own key.</span></div>
+ <div class="card"><div class="ic"><i class="fa-solid fa-coins" aria-hidden="true"></i></div><b>Cheapest</b><span>The lowest expected cost that still meets the task's quality bar.</span></div>
+ <div class="card"><div class="ic"><i class="fa-solid fa-scale-balanced" aria-hidden="true"></i></div><b>Balanced</b><span>The default: cost, quality and speed weighed together.</span></div>
+ <div class="card"><div class="ic"><i class="fa-solid fa-trophy" aria-hidden="true"></i></div><b>Best</b><span>The highest chance of a right answer first time; cost comes second.</span></div>
+ <div class="card"><div class="ic"><i class="fa-solid fa-bolt" aria-hidden="true"></i></div><b>Fastest</b><span>The shortest time to a checked result.</span></div>
+ <div class="card"><div class="ic"><i class="fa-solid fa-lock" aria-hidden="true"></i></div><b>Private</b><span>Only agents that keep your data on OpenVibe: its own runtime and open models on its hardware.</span></div>
+ <div class="card"><div class="ic"><i class="fa-solid fa-wallet" aria-hidden="true"></i></div><b>Budgets</b><span>A hard limit per task and per day. Actor never goes over it.</span></div>
+ </div>
+ </section>
+
+ <section id="routes">
+ <h2>What it routes to</h2>
+ <p class="lead2">Every agent system worth using, behind one API, one key and one bill.</p>
+ <div class="grid three">
+ <div class="card"><div class="ic"><i class="fa-solid fa-circle-nodes" aria-hidden="true"></i></div><b>OpenVibe's own runtime</b><span>Uses every OpenVibe product as a tool, with models chosen by OpenVibe.AI.</span></div>
+ <div class="card"><div class="ic"><i class="fa-solid fa-cloud" aria-hidden="true"></i></div><b>Hosted agent platforms</b><span>Agent platforms from companies like OpenAI and Anthropic, with their browsers, code runners and search.</span></div>
+ <div class="card"><div class="ic"><i class="fa-solid fa-code" aria-hidden="true"></i></div><b>Coding agents</b><span>For tasks that are really code: fixes, features, reviews and tests.</span></div>
+ <div class="card"><div class="ic"><i class="fa-solid fa-server" aria-hidden="true"></i></div><b>Open-source agents</b><span>Open runtimes and open models on OpenVibe's own hardware: the Private mode.</span></div>
+ <div class="card"><div class="ic"><i class="fa-solid fa-key" aria-hidden="true"></i></div><b>Your own keys</b><span>Bring a key for any platform and pay it directly; Actor still routes, checks and explains.</span></div>
+ <div class="card"><div class="ic"><i class="fa-solid fa-plug-circle-plus" aria-hidden="true"></i></div><b>New ones, fast</b><span>A new agent platform is one adapter. The day it lands, every app and agent can use it.</span></div>
+ </div>
+ </section>
+ <section>
+ <h2>Balanced live, explained always</h2>
+ <p class="lead2">Choices come from what actually happens, not from marketing pages.</p>
+ <div class="grid three">
+ <div class="card"><div class="ic"><i class="fa-solid fa-chart-line" aria-hidden="true"></i></div><b>Live signals</b><span>Price, speed, success rate and outages per agent system and per kind of task, updated from real runs.</span></div>
+ <div class="card"><div class="ic"><i class="fa-solid fa-arrows-rotate" aria-hidden="true"></i></div><b>Failover</b><span>When an agent system slows down or fails, tasks move to the next best one at once.</span></div>
+ <div class="card"><div class="ic"><i class="fa-solid fa-list-check" aria-hidden="true"></i></div><b>Checked results</b><span>Cheap first, then stronger agents only when a check fails: you pay for strength only when a task needs it.</span></div>
+ <div class="card"><div class="ic"><i class="fa-solid fa-magnifying-glass-chart" aria-hidden="true"></i></div><b>Public rankings</b><span>Success, cost and time per agent system for each kind of task, from real traffic, with dates.</span></div>
+ <div class="card"><div class="ic"><i class="fa-solid fa-receipt" aria-hidden="true"></i></div><b>Every choice explained</b><span>Which agent ran, why it won, what else was considered and what it cost.</span></div>
+ <div class="card"><div class="ic"><i class="fa-solid fa-user-astronaut" aria-hidden="true"></i></div><b>Your agents, on top</b><span>Always-on agents with memory, schedules and approvals; every task they take goes through the router.</span></div>
</div>
</div>
</section>
</section>
<section>
<section>
- <h2>Start from a template</h2>
- <p class="lead2">Each one is a starting point you can change.</p>
+ <h2>Start an agent from a template</h2>
+ <p class="lead2">Each one is a starting point you can change, and each routes its work through Actor.</p>
<div class="chips big"><span><i class="fa-solid fa-tower-broadcast" aria-hidden="true"></i>Stream co-host</span><span><i class="fa-solid fa-shield" aria-hidden="true"></i>Chat moderator</span><span><i class="fa-solid fa-magnifying-glass" aria-hidden="true"></i>Research assistant</span><span><i class="fa-solid fa-globe" aria-hidden="true"></i>Site builder</span><span><i class="fa-solid fa-robot" aria-hidden="true"></i>Robot pilot</span><span><i class="fa-solid fa-calendar-check" aria-hidden="true"></i>Personal assistant</span></div>
<div class="chips big"><span><i class="fa-solid fa-tower-broadcast" aria-hidden="true"></i>Stream co-host</span><span><i class="fa-solid fa-shield" aria-hidden="true"></i>Chat moderator</span><span><i class="fa-solid fa-magnifying-glass" aria-hidden="true"></i>Research assistant</span><span><i class="fa-solid fa-globe" aria-hidden="true"></i>Site builder</span><span><i class="fa-solid fa-robot" aria-hidden="true"></i>Robot pilot</span><span><i class="fa-solid fa-calendar-check" aria-hidden="true"></i>Personal assistant</span></div>
</section>
</section>
<section class="meanwhile">
<section class="meanwhile">
<h2>Reachable everywhere</h2>
<h2>Reachable everywhere</h2>
- <p class="lead2">Your agent is part of the network, not a separate app.</p>
+ <p class="lead2">Actor is part of the network, not a separate app.</p>
<div class="grid">
<div class="grid">
<div class="card"><div class="ic"><i class="fa-solid fa-bars" aria-hidden="true"></i></div><b>On every OpenVibe site</b><span>An agent button in the navbar, with the page you are on as context.</span></div>
<div class="card"><div class="ic"><i class="fa-solid fa-bars" aria-hidden="true"></i></div><b>On every OpenVibe site</b><span>An agent button in the navbar, with the page you are on as context.</span></div>
<a class="card" href="https://openvibe.chat"><div class="ic"><i class="fa-solid fa-comments" aria-hidden="true"></i></div><b>In chat</b><span>Direct messages on OpenVibe.Chat and @mentions in Live chat and Community threads.</span><span class="go">openvibe.chat →</span></a>
<a class="card" href="https://openvibe.chat"><div class="ic"><i class="fa-solid fa-comments" aria-hidden="true"></i></div><b>In chat</b><span>Direct messages on OpenVibe.Chat and @mentions in Live chat and Community threads.</span><span class="go">openvibe.chat →</span></a>
- <a class="card" href="https://openvibe.bot"><div class="ic"><i class="fa-solid fa-robot" aria-hidden="true"></i></div><b>With your robots</b><span>Give it a robot on OpenVibe.Bot to patrol, check on or perform with, with your approval.</span><span class="go">openvibe.bot →</span></a>
- <a class="card" href="https://openvibe.codes"><div class="ic"><i class="fa-solid fa-plug" aria-hidden="true"></i></div><b>From your own apps</b><span>An API, webhooks and an MCP server, so other assistants can use OpenVibe tools and talk to your agent.</span><span class="go">openvibe.codes →</span></a>
+ <a class="card" href="https://openvibe.bot"><div class="ic"><i class="fa-solid fa-robot" aria-hidden="true"></i></div><b>With your robots</b><span>Give an agent a robot on OpenVibe.Bot to patrol, check on or perform with, with your approval.</span><span class="go">openvibe.bot →</span></a>
+ <a class="card" href="https://openvibe.codes"><div class="ic"><i class="fa-solid fa-plug" aria-hidden="true"></i></div><b>From your own apps</b><span>An API, webhooks and an MCP server, so other assistants can hand tasks to Actor.</span><span class="go">openvibe.codes →</span></a>
</div>
</div>
</section>
</section>
<section id="questions" class="faq">
<section id="questions" class="faq">
<h2>Questions</h2>
<h2>Questions</h2>
- <details><summary>How is this different from a chat assistant?</summary><p>It keeps working when you leave: it has memory, schedules and triggers, and it can act across OpenVibe with the permissions you give it.</p></details>
- <details><summary>Can it do things without asking?</summary><p>Only what you allow. You grant each tool, and anything with consequences waits for your approval. Every action is logged, and you can stop an agent at any time.</p></details>
- <details><summary>Which AI models does it use?</summary><p>Any model OpenVibe.AI routes to, including open and local models, or your own API key.</p></details>
- <details><summary>Can other apps use my agent?</summary><p>Yes: an API, webhooks and an MCP server connect it to other tools and assistants.</p></details>
- <details><summary>What will it cost?</summary><p>You will be able to start without paying, within limits published before launch; heavier use and bigger models will be paid.</p></details>
+ <details><summary>Is this like OpenRouter?</summary><p>Yes, for agents: one API and one bill for many agent systems, with live prices and rankings. Actor routes whole tasks rather than single model calls, and it checks the results before you get them.</p></details>
+ <details><summary>Which agent systems does it use?</summary><p>OpenVibe's own runtime, hosted agent platforms from companies like OpenAI and Anthropic, coding agents, and open-source agents on OpenVibe's hardware. Each is an adapter, so new ones join quickly.</p></details>
+ <details><summary>How does it choose?</summary><p>For each kind of task it compares price, speed, success rate and current health across agent systems, then applies your mode and budget. Every choice is recorded and explained.</p></details>
+ <details><summary>Can I keep my data on OpenVibe?</summary><p>Yes. Private mode uses only OpenVibe's own runtime and open models on its own hardware.</p></details>
+ <details><summary>Can it act without asking?</summary><p>Only as far as you allow. Anything with consequences, like publishing, spending or moving a robot, waits for your approval, and every action is logged.</p></details>
+ <details><summary>What will it cost?</summary><p>You will be able to start without paying, within limits published before launch; bigger tasks and stronger agents will be paid, with the cost shown per task.</p></details>
</section>
</section>
<section class="build">
<section class="build">
<div class="card">
<div class="card">
<b><i class="fa-solid fa-person-digging" aria-hidden="true"></i> Build status</b>
<b><i class="fa-solid fa-person-digging" aria-hidden="true"></i> Build status</b>
- <span>OpenVibe.Actor is being built now, on the network's accounts, AI router and event system that already run. Its own service is not running yet: this page is a placeholder, nothing here is live yet. It opens with agent accounts with delegated permissions on OpenVibe.Network and the Actor service. · as of 2026-09-29 · <a href="/status.json">status.json</a></span>
+ <span>OpenVibe.Actor is being built now, on the network's accounts, AI router and event system that already run. Its own service is not running yet: this page is a placeholder, nothing here is live yet. It opens with the task router with its first agent adapters, then personal agents on OpenVibe.Network accounts. · as of 2026-09-29 · <a href="/status.json">status.json</a></span>
</div>
</div>
</section>
</section>
@@ -1,7 +1,7 @@
@@ -1,7 +1,7 @@
{
{
"name": "OpenVibe.Actor",
"name": "OpenVibe.Actor",
"short_name": "Actor",
"short_name": "Actor",
- "description": "Your agent in the cloud, connected to everything OpenVibe.",
+ "description": "One API for every AI agent. The right one for each task.",
"start_url": "/",
"start_url": "/",
"scope": "/",
"scope": "/",
"display": "standalone",
"display": "standalone",
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"service": "actor",
"service": "actor",
- "release": "d726e134d007",
+ "release": "90914e18ca92",
"released_at": "2026-09-29T00:00:00.000Z",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"booted_at": null,
"contracts_version": null,
"contracts_version": null,
@@ -8,7 +8,7 @@
@@ -8,7 +8,7 @@
"repoExists": false,
"repoExists": false,
"repoStage": "charter-only",
"repoStage": "charter-only",
"service": null,
"service": null,
- "launchWaitsFor": "agent accounts with delegated permissions on OpenVibe.Network and the Actor service",
+ "launchWaitsFor": "the task router with its first agent adapters, then personal agents on OpenVibe.Network accounts",
"factsAsOf": "2026-09-29",
"factsAsOf": "2026-09-29",
"network": "https://openvibe.network",
"network": "https://openvibe.network",
"updated": "2026-09-29",
"updated": "2026-09-29",
@@ -24,7 +24,7 @@
@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Bot — Get your robot online in minutes.">
<meta name="twitter:title" content="OpenVibe.Bot — Get your robot online in minutes.">
<meta name="twitter:description" content="OpenVibe.Bot is an open control panel for robots. Add a robot, pair it with one command or a QR code, and drive it from any browser with live video, real controls and a stop button that always works. Buy a ready-made bot or bring your own Raspberry Pi, ESP32, ROS 2 robot or phone. Share control, automate it, hand it to your AI agent, and stream it to OpenVibe.Live or openre.stream when you want to.">
<meta name="twitter:description" content="OpenVibe.Bot is an open control panel for robots. Add a robot, pair it with one command or a QR code, and drive it from any browser with live video, real controls and a stop button that always works. Buy a ready-made bot or bring your own Raspberry Pi, ESP32, ROS 2 robot or phone. Share control, automate it, hand it to your AI agent, and stream it to OpenVibe.Live or openre.stream when you want to.">
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
-<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.bot/#site","url":"https://openvibe.bot/","name":"OpenVibe.Bot","description":"OpenVibe.Bot is an open control panel for robots. Add a robot, pair it with one command or a QR code, and drive it from any browser with live video, real controls and a stop button that always works. Buy a ready-made bot or bring your own Raspberry Pi, ESP32, ROS 2 robot or phone. Share control, automate it, hand it to your AI agent, and stream it to OpenVibe.Live or openre.stream when you want to.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.bot/#page","url":"https://openvibe.bot/","name":"OpenVibe.Bot — Get your robot online in minutes.","description":"OpenVibe.Bot is an open control panel for robots. Add a robot, pair it with one command or a QR code, and drive it from any browser with live video, real controls and a stop button that always works. Buy a ready-made bot or bring your own Raspberry Pi, ESP32, ROS 2 robot or phone. Share control, automate it, hand it to your AI agent, and stream it to OpenVibe.Live or openre.stream when you want to.","isPartOf":{"@id":"https://openvibe.bot/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Bot","item":"https://openvibe.bot/"}]}},{"@type":"FAQPage","@id":"https://openvibe.bot/#faq","mainEntity":[{"@type":"Question","name":"Do I need to open ports on my router?","acceptedAnswer":{"@type":"Answer","text":"No. The robot connects out to OpenVibe, and video and controls travel over WebRTC, so it works behind ordinary home and mobile networks."}},{"@type":"Question","name":"Is it only for streaming?","acceptedAnswer":{"@type":"Answer","text":"No. Streaming is optional. Bot is a control panel for your robot first: drive it, check on it, share it and automate it."}},{"@type":"Question","name":"What hardware works?","acceptedAnswer":{"@type":"Answer","text":"A Raspberry Pi or another Linux board, an ESP32, a ROS 2 robot, an Android phone, or an ONVIF or RTSP camera. The curated kits list exactly what to buy."}},{"@type":"Question","name":"How does it keep the robot safe?","acceptedAnswer":{"@type":"Answer","text":"The device stops its motors by itself when commands or the connection stop. There is an emergency stop in the panel, limits on speed, range and time, and every command is logged."}},{"@type":"Question","name":"What will it cost?","acceptedAnswer":{"@type":"Answer","text":"Controlling your own robot will not cost anything. Limits and any paid extras will be published before launch."}}]}]}</script>
+<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.bot/#site","url":"https://openvibe.bot/","name":"OpenVibe.Bot","description":"OpenVibe.Bot is an open control panel for robots. Add a robot, pair it with one command or a QR code, and drive it from any browser with live video, real controls and a stop button that always works. Buy a ready-made bot or bring your own Raspberry Pi, ESP32, ROS 2 robot or phone. Share control, automate it, hand it to your AI agent, and stream it to OpenVibe.Live or openre.stream when you want to.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.bot/#page","url":"https://openvibe.bot/","name":"OpenVibe.Bot — Get your robot online in minutes.","description":"OpenVibe.Bot is an open control panel for robots. Add a robot, pair it with one command or a QR code, and drive it from any browser with live video, real controls and a stop button that always works. Buy a ready-made bot or bring your own Raspberry Pi, ESP32, ROS 2 robot or phone. Share control, automate it, hand it to your AI agent, and stream it to OpenVibe.Live or openre.stream when you want to.","isPartOf":{"@id":"https://openvibe.bot/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Bot","item":"https://openvibe.bot/"}]}},{"@type":"FAQPage","@id":"https://openvibe.bot/#faq","mainEntity":[{"@type":"Question","name":"Do I need to open ports on my router?","acceptedAnswer":{"@type":"Answer","text":"No. The robot connects out to OpenVibe, and video and controls travel over WebRTC, so it works behind ordinary home and mobile networks."}},{"@type":"Question","name":"Is it only for streaming?","acceptedAnswer":{"@type":"Answer","text":"No. Streaming is optional. Bot is a control panel for your robot first: drive it, check on it, share it and automate it."}},{"@type":"Question","name":"Which robot comes first?","acceptedAnswer":{"@type":"Answer","text":"The Adeept 4WD Smart Car Kit for Raspberry Pi: four motors, a pan-tilt camera, distance and line sensors, lights and a buzzer. OpenVibe's device agent drives it directly, so its own open control port never has to be exposed."}},{"@type":"Question","name":"What hardware works?","acceptedAnswer":{"@type":"Answer","text":"A Raspberry Pi or another Linux board, an ESP32, a ROS 2 robot, an Android phone, or an ONVIF or RTSP camera. The curated kits list exactly what to buy."}},{"@type":"Question","name":"How does it keep the robot safe?","acceptedAnswer":{"@type":"Answer","text":"The device stops its motors by itself when commands or the connection stop. There is an emergency stop in the panel, limits on speed, range and time, and every command is logged."}},{"@type":"Question","name":"What will it cost?","acceptedAnswer":{"@type":"Answer","text":"Controlling your own robot will not cost anything. Limits and any paid extras will be published before launch."}}]}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
+.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}
+.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
+.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}
+.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}
+.cands{list-style:none;display:grid;gap:6px}
+.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}
+.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.cands li span{text-align:right;font-variant-numeric:tabular-nums}
+.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}
+.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}
+.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.card.big{padding:24px}.card.big b{font-size:17px}
.card.big{padding:24px}.card.big b{font-size:17px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
-@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}
+@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
</style>
</style>
</head>
</head>
@@ -180,7 +191,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -180,7 +191,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
<h2>Buy one or bring your own</h2>
<h2>Buy one or bring your own</h2>
<p class="lead2">Start with hardware that is known to work, or use what you already have.</p>
<p class="lead2">Start with hardware that is known to work, or use what you already have.</p>
<div class="choice">
<div class="choice">
- <div class="card big"><div class="ic"><i class="fa-solid fa-box-open" aria-hidden="true"></i></div><b>Get a robot</b><span>Curated kits with parts lists, tested settings and build guides, and ready-made bots that arrive paired to your account.</span><div class="chips"><span>Rover kits</span><span>Telepresence bots</span><span>Pan-tilt cameras</span><span>Robot arms</span></div></div>
+ <div class="card big"><div class="ic"><i class="fa-solid fa-box-open" aria-hidden="true"></i></div><b>Get a robot</b><span>Curated kits with parts lists, tested settings and build guides, and ready-made bots that arrive paired to your account. The first one on OpenVibe.Bot is the Adeept 4WD Smart Car for Raspberry Pi.</span><div class="chips"><span>Adeept 4WD Smart Car (Raspberry Pi)</span><span>Rover kits</span><span>Telepresence bots</span><span>Pan-tilt cameras</span><span>Robot arms</span></div></div>
<div class="card big"><div class="ic"><i class="fa-solid fa-screwdriver-wrench" aria-hidden="true"></i></div><b>Bring your own</b><span>Anything with motors, a camera or sensors. Install the OpenVibe device agent or add the library, and your robot shows up in the panel.</span><div class="chips"><span>Raspberry Pi and Linux boards</span><span>ESP32</span><span>ROS 2</span><span>Android phones</span><span>ONVIF and RTSP cameras</span><span>Serial motor boards</span></div></div>
<div class="card big"><div class="ic"><i class="fa-solid fa-screwdriver-wrench" aria-hidden="true"></i></div><b>Bring your own</b><span>Anything with motors, a camera or sensors. Install the OpenVibe device agent or add the library, and your robot shows up in the panel.</span><div class="chips"><span>Raspberry Pi and Linux boards</span><span>ESP32</span><span>ROS 2</span><span>Android phones</span><span>ONVIF and RTSP cameras</span><span>Serial motor boards</span></div></div>
</div>
</div>
</section>
</section>
@@ -199,6 +210,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -199,6 +210,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</section>
</section>
+
<section class="meanwhile">
<section class="meanwhile">
<h2>Stream it, record it, connect it</h2>
<h2>Stream it, record it, connect it</h2>
<p class="lead2">Optional, one toggle each. Your robot does not need an audience to be useful.</p>
<p class="lead2">Optional, one toggle each. Your robot does not need an audience to be useful.</p>
@@ -214,6 +226,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -214,6 +226,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
<h2>Questions</h2>
<h2>Questions</h2>
<details><summary>Do I need to open ports on my router?</summary><p>No. The robot connects out to OpenVibe, and video and controls travel over WebRTC, so it works behind ordinary home and mobile networks.</p></details>
<details><summary>Do I need to open ports on my router?</summary><p>No. The robot connects out to OpenVibe, and video and controls travel over WebRTC, so it works behind ordinary home and mobile networks.</p></details>
<details><summary>Is it only for streaming?</summary><p>No. Streaming is optional. Bot is a control panel for your robot first: drive it, check on it, share it and automate it.</p></details>
<details><summary>Is it only for streaming?</summary><p>No. Streaming is optional. Bot is a control panel for your robot first: drive it, check on it, share it and automate it.</p></details>
+ <details><summary>Which robot comes first?</summary><p>The Adeept 4WD Smart Car Kit for Raspberry Pi: four motors, a pan-tilt camera, distance and line sensors, lights and a buzzer. OpenVibe's device agent drives it directly, so its own open control port never has to be exposed.</p></details>
<details><summary>What hardware works?</summary><p>A Raspberry Pi or another Linux board, an ESP32, a ROS 2 robot, an Android phone, or an ONVIF or RTSP camera. The curated kits list exactly what to buy.</p></details>
<details><summary>What hardware works?</summary><p>A Raspberry Pi or another Linux board, an ESP32, a ROS 2 robot, an Android phone, or an ONVIF or RTSP camera. The curated kits list exactly what to buy.</p></details>
<details><summary>How does it keep the robot safe?</summary><p>The device stops its motors by itself when commands or the connection stop. There is an emergency stop in the panel, limits on speed, range and time, and every command is logged.</p></details>
<details><summary>How does it keep the robot safe?</summary><p>The device stops its motors by itself when commands or the connection stop. There is an emergency stop in the panel, limits on speed, range and time, and every command is logged.</p></details>
<details><summary>What will it cost?</summary><p>Controlling your own robot will not cost anything. Limits and any paid extras will be published before launch.</p></details>
<details><summary>What will it cost?</summary><p>Controlling your own robot will not cost anything. Limits and any paid extras will be published before launch.</p></details>
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"service": "bot",
"service": "bot",
- "release": "d6dcf5253182",
+ "release": "0d72df741ce6",
"released_at": "2026-09-29T00:00:00.000Z",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"booted_at": null,
"contracts_version": null,
"contracts_version": null,
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
+.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}
+.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
+.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}
+.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}
+.cands{list-style:none;display:grid;gap:6px}
+.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}
+.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.cands li span{text-align:right;font-variant-numeric:tabular-nums}
+.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}
+.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}
+.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.card.big{padding:24px}.card.big b{font-size:17px}
.card.big{padding:24px}.card.big b{font-size:17px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
-@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}
+@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
</style>
</style>
</head>
</head>
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"service": "coupons",
"service": "coupons",
- "release": "35ee1dcacac8",
+ "release": "8770f6d712a0",
"released_at": "2026-09-29T00:00:00.000Z",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"booted_at": null,
"contracts_version": null,
"contracts_version": null,
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
+.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}
+.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
+.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}
+.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}
+.cands{list-style:none;display:grid;gap:6px}
+.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}
+.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.cands li span{text-align:right;font-variant-numeric:tabular-nums}
+.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}
+.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}
+.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.card.big{padding:24px}.card.big b{font-size:17px}
.card.big{padding:24px}.card.big b{font-size:17px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
-@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}
+@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
</style>
</style>
</head>
</head>
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"service": "deals",
"service": "deals",
- "release": "c650df3e7943",
+ "release": "d020ff1ae119",
"released_at": "2026-09-29T00:00:00.000Z",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"booted_at": null,
"contracts_version": null,
"contracts_version": null,
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
+.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}
+.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
+.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}
+.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}
+.cands{list-style:none;display:grid;gap:6px}
+.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}
+.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.cands li span{text-align:right;font-variant-numeric:tabular-nums}
+.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}
+.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}
+.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.card.big{padding:24px}.card.big b{font-size:17px}
.card.big{padding:24px}.card.big b{font-size:17px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
-@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}
+@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
</style>
</style>
</head>
</head>
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"service": "download",
"service": "download",
- "release": "f31103a9b687",
+ "release": "fe3036a1a92f",
"released_at": "2026-09-29T00:00:00.000Z",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"booted_at": null,
"contracts_version": null,
"contracts_version": null,
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
+.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}
+.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
+.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}
+.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}
+.cands{list-style:none;display:grid;gap:6px}
+.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}
+.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.cands li span{text-align:right;font-variant-numeric:tabular-nums}
+.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}
+.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}
+.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.card.big{padding:24px}.card.big b{font-size:17px}
.card.big{padding:24px}.card.big b{font-size:17px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
-@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}
+@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
</style>
</style>
</head>
</head>
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"service": "events",
"service": "events",
- "release": "775d8a75ec2d",
+ "release": "215c667caeec",
"released_at": "2026-09-29T00:00:00.000Z",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"booted_at": null,
"contracts_version": null,
"contracts_version": null,
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
+.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}
+.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
+.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}
+.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}
+.cands{list-style:none;display:grid;gap:6px}
+.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}
+.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.cands li span{text-align:right;font-variant-numeric:tabular-nums}
+.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}
+.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}
+.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.card.big{padding:24px}.card.big b{font-size:17px}
.card.big{padding:24px}.card.big b{font-size:17px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
-@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}
+@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
</style>
</style>
</head>
</head>
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"service": "food",
"service": "food",
- "release": "33fe172f4ba8",
+ "release": "f10c97817980",
"released_at": "2026-09-29T00:00:00.000Z",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"booted_at": null,
"contracts_version": null,
"contracts_version": null,
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
+.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}
+.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
+.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}
+.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}
+.cands{list-style:none;display:grid;gap:6px}
+.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}
+.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.cands li span{text-align:right;font-variant-numeric:tabular-nums}
+.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}
+.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}
+.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.card.big{padding:24px}.card.big b{font-size:17px}
.card.big{padding:24px}.card.big b{font-size:17px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
-@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}
+@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
</style>
</style>
</head>
</head>
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"service": "help",
"service": "help",
- "release": "ff05ba62a0a6",
+ "release": "a22dfa6141ae",
"released_at": "2026-09-29T00:00:00.000Z",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"booted_at": null,
"contracts_version": null,
"contracts_version": null,
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
+.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}
+.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
+.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}
+.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}
+.cands{list-style:none;display:grid;gap:6px}
+.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}
+.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.cands li span{text-align:right;font-variant-numeric:tabular-nums}
+.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}
+.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}
+.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.card.big{padding:24px}.card.big b{font-size:17px}
.card.big{padding:24px}.card.big b{font-size:17px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
-@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}
+@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
</style>
</style>
</head>
</head>
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"service": "homes",
"service": "homes",
- "release": "b7b52e6c88f7",
+ "release": "6de124d8b681",
"released_at": "2026-09-29T00:00:00.000Z",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"booted_at": null,
"contracts_version": null,
"contracts_version": null,
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
+.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}
+.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
+.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}
+.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}
+.cands{list-style:none;display:grid;gap:6px}
+.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}
+.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.cands li span{text-align:right;font-variant-numeric:tabular-nums}
+.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}
+.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}
+.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.card.big{padding:24px}.card.big b{font-size:17px}
.card.big{padding:24px}.card.big b{font-size:17px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
-@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}
+@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
</style>
</style>
</head>
</head>
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"service": "host",
"service": "host",
- "release": "073bff41498e",
+ "release": "2233fb7572a6",
"released_at": "2026-09-29T00:00:00.000Z",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"booted_at": null,
"contracts_version": null,
"contracts_version": null,
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
+.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}
+.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
+.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}
+.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}
+.cands{list-style:none;display:grid;gap:6px}
+.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}
+.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.cands li span{text-align:right;font-variant-numeric:tabular-nums}
+.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}
+.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}
+.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.card.big{padding:24px}.card.big b{font-size:17px}
.card.big{padding:24px}.card.big b{font-size:17px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
-@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}
+@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
</style>
</style>
</head>
</head>
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"service": "news",
"service": "news",
- "release": "ed41915d231f",
+ "release": "afad07684f23",
"released_at": "2026-09-29T00:00:00.000Z",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"booted_at": null,
"contracts_version": null,
"contracts_version": null,
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
+.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}
+.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
+.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}
+.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}
+.cands{list-style:none;display:grid;gap:6px}
+.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}
+.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.cands li span{text-align:right;font-variant-numeric:tabular-nums}
+.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}
+.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}
+.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.card.big{padding:24px}.card.big b{font-size:17px}
.card.big{padding:24px}.card.big b{font-size:17px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
-@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}
+@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
</style>
</style>
</head>
</head>
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"service": "pics",
"service": "pics",
- "release": "e72016bc0394",
+ "release": "35f8193c0d26",
"released_at": "2026-09-29T00:00:00.000Z",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"booted_at": null,
"contracts_version": null,
"contracts_version": null,
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
+.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}
+.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
+.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}
+.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}
+.cands{list-style:none;display:grid;gap:6px}
+.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}
+.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.cands li span{text-align:right;font-variant-numeric:tabular-nums}
+.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}
+.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}
+.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.card.big{padding:24px}.card.big b{font-size:17px}
.card.big{padding:24px}.card.big b{font-size:17px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
-@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}
+@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
</style>
</style>
</head>
</head>
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"service": "quest",
"service": "quest",
- "release": "61a9d8435854",
+ "release": "4eba62984a98",
"released_at": "2026-09-29T00:00:00.000Z",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"booted_at": null,
"contracts_version": null,
"contracts_version": null,
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
+.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}
+.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
+.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}
+.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}
+.cands{list-style:none;display:grid;gap:6px}
+.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}
+.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.cands li span{text-align:right;font-variant-numeric:tabular-nums}
+.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}
+.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}
+.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.card.big{padding:24px}.card.big b{font-size:17px}
.card.big{padding:24px}.card.big b{font-size:17px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
-@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}
+@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
</style>
</style>
</head>
</head>
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"service": "rent",
"service": "rent",
- "release": "c4da9315548d",
+ "release": "98a920e4ebb8",
"released_at": "2026-09-29T00:00:00.000Z",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"booted_at": null,
"contracts_version": null,
"contracts_version": null,
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
+.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}
+.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
+.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}
+.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}
+.cands{list-style:none;display:grid;gap:6px}
+.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}
+.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.cands li span{text-align:right;font-variant-numeric:tabular-nums}
+.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}
+.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}
+.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.card.big{padding:24px}.card.big b{font-size:17px}
.card.big{padding:24px}.card.big b{font-size:17px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
-@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}
+@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
</style>
</style>
</head>
</head>
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"service": "reviews",
"service": "reviews",
- "release": "d33908ce7111",
+ "release": "7aabc2d9e18e",
"released_at": "2026-09-29T00:00:00.000Z",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"booted_at": null,
"contracts_version": null,
"contracts_version": null,
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
+.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}
+.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
+.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}
+.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}
+.cands{list-style:none;display:grid;gap:6px}
+.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}
+.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.cands li span{text-align:right;font-variant-numeric:tabular-nums}
+.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}
+.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}
+.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.card.big{padding:24px}.card.big b{font-size:17px}
.card.big{padding:24px}.card.big b{font-size:17px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
-@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}
+@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
</style>
</style>
</head>
</head>
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"service": "run",
"service": "run",
- "release": "685bc59d6098",
+ "release": "5f1846f79623",
"released_at": "2026-09-29T00:00:00.000Z",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"booted_at": null,
"contracts_version": null,
"contracts_version": null,
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
+.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}
+.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
+.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}
+.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}
+.cands{list-style:none;display:grid;gap:6px}
+.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}
+.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.cands li span{text-align:right;font-variant-numeric:tabular-nums}
+.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}
+.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}
+.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.card.big{padding:24px}.card.big b{font-size:17px}
.card.big{padding:24px}.card.big b{font-size:17px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
-@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}
+@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
</style>
</style>
</head>
</head>
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"service": "services",
"service": "services",
- "release": "3c4ff0411564",
+ "release": "8d2fa89ea9e3",
"released_at": "2026-09-29T00:00:00.000Z",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"booted_at": null,
"contracts_version": null,
"contracts_version": null,
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
+.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}
+.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
+.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}
+.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}
+.cands{list-style:none;display:grid;gap:6px}
+.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}
+.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.cands li span{text-align:right;font-variant-numeric:tabular-nums}
+.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}
+.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}
+.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.card.big{padding:24px}.card.big b{font-size:17px}
.card.big{padding:24px}.card.big b{font-size:17px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
-@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}
+@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
</style>
</style>
</head>
</head>
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"service": "space",
"service": "space",
- "release": "48f1d864bd53",
+ "release": "bce11705589a",
"released_at": "2026-09-29T00:00:00.000Z",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"booted_at": null,
"contracts_version": null,
"contracts_version": null,
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
+.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}
+.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
+.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}
+.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}
+.cands{list-style:none;display:grid;gap:6px}
+.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}
+.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.cands li span{text-align:right;font-variant-numeric:tabular-nums}
+.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}
+.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}
+.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.card.big{padding:24px}.card.big b{font-size:17px}
.card.big{padding:24px}.card.big b{font-size:17px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
-@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}
+@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
</style>
</style>
</head>
</head>
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"service": "tips",
"service": "tips",
- "release": "bbdd22624542",
+ "release": "ef1de815fca3",
"released_at": "2026-09-29T00:00:00.000Z",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"booted_at": null,
"contracts_version": null,
"contracts_version": null,
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
+.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}
+.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
+.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}
+.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}
+.cands{list-style:none;display:grid;gap:6px}
+.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}
+.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.cands li span{text-align:right;font-variant-numeric:tabular-nums}
+.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}
+.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}
+.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.card.big{padding:24px}.card.big b{font-size:17px}
.card.big{padding:24px}.card.big b{font-size:17px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
-@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}
+@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
</style>
</style>
</head>
</head>
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"service": "trade",
"service": "trade",
- "release": "93c7a5251945",
+ "release": "7df1bf9642b6",
"released_at": "2026-09-29T00:00:00.000Z",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"booted_at": null,
"contracts_version": null,
"contracts_version": null,
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
+.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}
+.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
+.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}
+.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}
+.cands{list-style:none;display:grid;gap:6px}
+.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}
+.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.cands li span{text-align:right;font-variant-numeric:tabular-nums}
+.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}
+.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}
+.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.card.big{padding:24px}.card.big b{font-size:17px}
.card.big{padding:24px}.card.big b{font-size:17px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
-@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}
+@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
</style>
</style>
</head>
</head>
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"service": "video",
"service": "video",
- "release": "e9c38e4e184a",
+ "release": "9ee86614f867",
"released_at": "2026-09-29T00:00:00.000Z",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"booted_at": null,
"contracts_version": null,
"contracts_version": null,
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
+.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}
+.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
+.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}
+.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}
+.cands{list-style:none;display:grid;gap:6px}
+.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}
+.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.cands li span{text-align:right;font-variant-numeric:tabular-nums}
+.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}
+.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}
+.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.card.big{padding:24px}.card.big b{font-size:17px}
.card.big{padding:24px}.card.big b{font-size:17px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
-@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}
+@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
</style>
</style>
</head>
</head>
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"service": "vip",
"service": "vip",
- "release": "3cf1ce50fcfa",
+ "release": "a39b685cc155",
"released_at": "2026-09-29T00:00:00.000Z",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"booted_at": null,
"contracts_version": null,
"contracts_version": null,
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
+.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}
+.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
+.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}
+.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}
+.cands{list-style:none;display:grid;gap:6px}
+.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}
+.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.cands li span{text-align:right;font-variant-numeric:tabular-nums}
+.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}
+.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}
+.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.card.big{padding:24px}.card.big b{font-size:17px}
.card.big{padding:24px}.card.big b{font-size:17px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
-@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}
+@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
</style>
</style>
</head>
</head>
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"service": "watch",
"service": "watch",
- "release": "db3af1fe5690",
+ "release": "520b6134c006",
"released_at": "2026-09-29T00:00:00.000Z",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"booted_at": null,
"contracts_version": null,
"contracts_version": null,
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
+.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}
+.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
+.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}
+.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}
+.cands{list-style:none;display:grid;gap:6px}
+.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}
+.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.cands li span{text-align:right;font-variant-numeric:tabular-nums}
+.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}
+.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}
+.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.card.big{padding:24px}.card.big b{font-size:17px}
.card.big{padding:24px}.card.big b{font-size:17px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
-@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}
+@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
</style>
</style>
</head>
</head>
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"service": "website",
"service": "website",
- "release": "7ed1a86c7726",
+ "release": "c470104088ba",
"released_at": "2026-09-29T00:00:00.000Z",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"booted_at": null,
"contracts_version": null,
"contracts_version": null,
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
+.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}
+.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
+.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}
+.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}
+.cands{list-style:none;display:grid;gap:6px}
+.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}
+.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.cands li span{text-align:right;font-variant-numeric:tabular-nums}
+.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}
+.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}
+.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.card.big{padding:24px}.card.big b{font-size:17px}
.card.big{padding:24px}.card.big b{font-size:17px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
-@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}
+@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
</style>
</style>
</head>
</head>
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"service": "realtime",
"service": "realtime",
- "release": "b271aa178d7e",
+ "release": "0221dfe18e0e",
"released_at": "2026-09-29T00:00:00.000Z",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"booted_at": null,
"contracts_version": null,
"contracts_version": null,
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
+.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}
+.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
+.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}
+.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}
+.cands{list-style:none;display:grid;gap:6px}
+.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}
+.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.cands li span{text-align:right;font-variant-numeric:tabular-nums}
+.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}
+.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}
+.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.card.big{padding:24px}.card.big b{font-size:17px}
.card.big{padding:24px}.card.big b{font-size:17px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
-@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}
+@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
.live .sum{font-size:14px;color:var(--text-secondary);margin-bottom:14px;line-height:1.6}
.live .sum{font-size:14px;color:var(--text-secondary);margin-bottom:14px;line-height:1.6}
.live .sum b{color:var(--text-primary)}
.live .sum b{color:var(--text-primary)}
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"service": "status",
"service": "status",
- "release": "e2fecfa09c74",
+ "release": "9b981c0c3e79",
"released_at": "2026-09-29T00:00:00.000Z",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"booted_at": null,
"contracts_version": null,
"contracts_version": null,
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -123,6 +123,17 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
+.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}
+.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
+.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}
+.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}
+.cands{list-style:none;display:grid;gap:6px}
+.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}
+.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.cands li span{text-align:right;font-variant-numeric:tabular-nums}
+.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}
+.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}
+.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.card.big{padding:24px}.card.big b{font-size:17px}
.card.big{padding:24px}.card.big b{font-size:17px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -130,7 +141,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
-@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}}
+@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
</style>
</style>
</head>
</head>
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"service": "themes",
"service": "themes",
- "release": "9bc65bb6a1b1",
+ "release": "b6662abd3bc6",
"released_at": "2026-09-29T00:00:00.000Z",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"booted_at": null,
"contracts_version": null,
"contracts_version": null,
@@ -1331,8 +1331,9 @@
@@ -1331,8 +1331,9 @@
{
{
"icon": "fa-box-open",
"icon": "fa-box-open",
"title": "Get a robot",
"title": "Get a robot",
- "text": "Curated kits with parts lists, tested settings and build guides, and ready-made bots that arrive paired to your account.",
+ "text": "Curated kits with parts lists, tested settings and build guides, and ready-made bots that arrive paired to your account. The first one on OpenVibe.Bot is the Adeept 4WD Smart Car for Raspberry Pi.",
"chips": [
"chips": [
+ "Adeept 4WD Smart Car (Raspberry Pi)",
"Rover kits",
"Rover kits",
"Telepresence bots",
"Telepresence bots",
"Pan-tilt cameras",
"Pan-tilt cameras",
@@ -1427,6 +1428,10 @@
@@ -1427,6 +1428,10 @@
"Is it only for streaming?",
"Is it only for streaming?",
"No. Streaming is optional. Bot is a control panel for your robot first: drive it, check on it, share it and automate it."
"No. Streaming is optional. Bot is a control panel for your robot first: drive it, check on it, share it and automate it."
],
],
+ [
+ "Which robot comes first?",
+ "The Adeept 4WD Smart Car Kit for Raspberry Pi: four motors, a pan-tilt camera, distance and line sensors, lights and a buzzer. OpenVibe's device agent drives it directly, so its own open control port never has to be exposed."
+ ],
[
[
"What hardware works?",
"What hardware works?",
"A Raspberry Pi or another Linux board, an ESP32, a ROS 2 robot, an Android phone, or an ONVIF or RTSP camera. The curated kits list exactly what to buy."
"A Raspberry Pi or another Linux board, an ESP32, a ROS 2 robot, an Android phone, or an ONVIF or RTSP camera. The curated kits list exactly what to buy."
@@ -1489,8 +1494,8 @@
@@ -1489,8 +1494,8 @@
"name": "OpenVibe.Actor",
"name": "OpenVibe.Actor",
"icon": "fa-user-astronaut",
"icon": "fa-user-astronaut",
"accent": "#a78bfa",
"accent": "#a78bfa",
- "tagline": "Your agent in the cloud, connected to everything OpenVibe.",
- "description": "OpenVibe.Actor gives you an AI agent that lives in OpenVibe's cloud and works for you around the clock. It remembers, runs on schedules and triggers, uses every OpenVibe product as a tool, browses and codes in a sandbox, and asks before it does anything that matters. Talk to it from any OpenVibe site, in chat, or from your own apps.",
+ "tagline": "One API for every AI agent. The right one for each task.",
+ "description": "OpenVibe.Actor sends each task to the agent system best suited to it, from hosted agent platforms to open-source runtimes, coding agents and OpenVibe's own, and balances them live on price, speed and success. Pick a mode (cheapest, balanced, best, fastest or private), set a budget, and get a checked result with its cost and the reason for every choice. On top of it, your own always-on agents work across the whole OpenVibe network.",
"pillars": [
"pillars": [
[
[
"Your agents",
"Your agents",
@@ -1521,8 +1526,8 @@
@@ -1521,8 +1526,8 @@
"The API and SDK agents are built on."
"The API and SDK agents are built on."
]
]
],
],
- "keywords": "cloud ai agent, hosted ai agent, personal ai agent, ai agent with memory, autonomous ai assistant, ai agent platform, open source ai agent, mcp server, ai agent approvals",
- "launch": "agent accounts with delegated permissions on OpenVibe.Network and the Actor service",
+ "keywords": "ai agent router, openrouter for agents, agent api, route tasks to ai agents, cheapest ai agent, ai agent comparison, hosted ai agent, cloud ai agent, personal ai agent, mcp server",
+ "launch": "the task router with its first agent adapters, then personal agents on OpenVibe.Network accounts",
"noRepo": true,
"noRepo": true,
"vision": {
"vision": {
"badge": "being built",
"badge": "being built",
@@ -1532,73 +1537,181 @@
@@ -1532,73 +1537,181 @@
"fa-circle-nodes"
"fa-circle-nodes"
],
],
"viz": {
"viz": {
- "kind": "agent",
- "name": "Nova",
- "role": "stream co-host",
- "state": "always on",
- "icon": "fa-user-astronaut",
- "steps": [
- "Watched tonight's stream and marked 3 highlights",
- "Clipped the best one on OpenVibe.Media",
- "Drafted a post for your blog with the clip"
+ "kind": "router",
+ "budget": "budget 50¢",
+ "task": "Research five competitors of my shop and write a one-page brief with sources.",
+ "modes": [
+ "Cheapest",
+ "Balanced",
+ "Best",
+ "Fastest",
+ "Private"
+ ],
+ "mode": "Balanced",
+ "candidates": [
+ {
+ "icon": "fa-circle-nodes",
+ "name": "OpenVibe runtime",
+ "cost": "6¢",
+ "time": "3 min",
+ "success": "92%",
+ "pick": true
+ },
+ {
+ "icon": "fa-cloud",
+ "name": "Hosted frontier agent",
+ "cost": "31¢",
+ "time": "2 min",
+ "success": "95%"
+ },
+ {
+ "icon": "fa-code",
+ "name": "Coding agent",
+ "cost": "12¢",
+ "time": "4 min",
+ "success": "81%"
+ },
+ {
+ "icon": "fa-lock",
+ "name": "Open model on OpenVibe",
+ "cost": "1¢",
+ "time": "7 min",
+ "success": "74%"
+ }
],
],
- "ask": "Publish the post on openvibe.blog?",
- "caption": "Design preview of an agent at work",
- "label": "Design preview: an agent's activity feed ending in a request for approval"
+ "why": "Meets this task's quality bar at the lowest expected cost; a second model family checks the brief before you get it.",
+ "caption": "Design preview; the numbers are illustrative",
+ "label": "Design preview: a task routed across four agent systems with cost, time and success estimates, the balanced mode selected"
},
},
- "stepsTitle": "Start in a minute",
- "stepsLead": "Describe what you want or start from a template. Change anything later.",
+ "stepsTitle": "How a task runs",
+ "stepsLead": "Send a task from the site, the API or any OpenVibe app. Actor does the rest.",
"steps": [
"steps": [
[
[
- "Create an agent",
- "Pick a template or describe the job in your own words. Choose its model and its personality."
+ "Describe the task",
+ "Say what you want done, pick a mode and set a budget. Attach files or give it a robot, a site or a stream to work with."
],
],
[
[
- "Decide what it may do",
- "Grant it tools one by one. Anything with consequences, like publishing, spending or moving a robot, waits for your approval."
+ "Actor picks the agent",
+ "It weighs every agent system on live price, speed and success for this kind of task, picks one, and tells you why."
],
],
[
[
- "Let it work",
- "It runs in the cloud on schedules and triggers, and you can reach it from any OpenVibe site."
+ "Checked, then delivered",
+ "A different model checks the result; a failed check moves the task to a stronger agent. You see the cost to the cent."
]
]
],
],
- "featuresTitle": "What your agent can do",
- "featuresLead": "An agent is only as useful as what it can reach. Yours can reach the whole network.",
+ "featuresTitle": "Modes",
+ "featuresLead": "Tell Actor what matters most. It balances the rest.",
"features": [
"features": [
[
[
- "fa-cloud",
- "Always on",
- "Runs in OpenVibe's cloud around the clock. Close your laptop; it keeps going."
+ "fa-coins",
+ "Cheapest",
+ "The lowest expected cost that still meets the task's quality bar."
],
],
[
[
- "fa-circle-nodes",
- "Uses the whole network",
- "Live, Chat, Blog, Wiki, Community, Tools, Media, Host, Bot and more, each through its own API."
+ "fa-scale-balanced",
+ "Balanced",
+ "The default: cost, quality and speed weighed together."
],
],
[
[
- "fa-window-maximize",
- "Browses and codes",
- "A sandboxed browser and code runner for work outside the network."
+ "fa-trophy",
+ "Best",
+ "The highest chance of a right answer first time; cost comes second."
],
],
[
[
- "fa-brain",
- "Remembers",
- "Long-term memory you can read, edit and wipe."
+ "fa-bolt",
+ "Fastest",
+ "The shortest time to a checked result."
],
],
[
[
- "fa-hand",
- "Asks first",
- "An approval inbox, a full activity log, spending limits and a kill switch."
+ "fa-lock",
+ "Private",
+ "Only agents that keep your data on OpenVibe: its own runtime and open models on its hardware."
],
],
[
[
- "fa-shuffle",
- "Any model",
- "Routed through OpenVibe.AI: hosted, open or local models, or your own key."
+ "fa-wallet",
+ "Budgets",
+ "A hard limit per task and per day. Actor never goes over it."
]
]
],
],
+ "more": [
+ {
+ "id": "routes",
+ "title": "What it routes to",
+ "lead": "Every agent system worth using, behind one API, one key and one bill.",
+ "cards": [
+ [
+ "fa-circle-nodes",
+ "OpenVibe's own runtime",
+ "Uses every OpenVibe product as a tool, with models chosen by OpenVibe.AI."
+ ],
+ [
+ "fa-cloud",
+ "Hosted agent platforms",
+ "Agent platforms from companies like OpenAI and Anthropic, with their browsers, code runners and search."
+ ],
+ [
+ "fa-code",
+ "Coding agents",
+ "For tasks that are really code: fixes, features, reviews and tests."
+ ],
+ [
+ "fa-server",
+ "Open-source agents",
+ "Open runtimes and open models on OpenVibe's own hardware: the Private mode."
+ ],
+ [
+ "fa-key",
+ "Your own keys",
+ "Bring a key for any platform and pay it directly; Actor still routes, checks and explains."
+ ],
+ [
+ "fa-plug-circle-plus",
+ "New ones, fast",
+ "A new agent platform is one adapter. The day it lands, every app and agent can use it."
+ ]
+ ]
+ },
+ {
+ "title": "Balanced live, explained always",
+ "lead": "Choices come from what actually happens, not from marketing pages.",
+ "cards": [
+ [
+ "fa-chart-line",
+ "Live signals",
+ "Price, speed, success rate and outages per agent system and per kind of task, updated from real runs."
+ ],
+ [
+ "fa-arrows-rotate",
+ "Failover",
+ "When an agent system slows down or fails, tasks move to the next best one at once."
+ ],
+ [
+ "fa-list-check",
+ "Checked results",
+ "Cheap first, then stronger agents only when a check fails: you pay for strength only when a task needs it."
+ ],
+ [
+ "fa-magnifying-glass-chart",
+ "Public rankings",
+ "Success, cost and time per agent system for each kind of task, from real traffic, with dates.",
+ null
+ ],
+ [
+ "fa-receipt",
+ "Every choice explained",
+ "Which agent ran, why it won, what else was considered and what it cost."
+ ],
+ [
+ "fa-user-astronaut",
+ "Your agents, on top",
+ "Always-on agents with memory, schedules and approvals; every task they take goes through the router."
+ ]
+ ]
+ }
+ ],
"templates": {
"templates": {
- "title": "Start from a template",
- "lead": "Each one is a starting point you can change.",
+ "title": "Start an agent from a template",
+ "lead": "Each one is a starting point you can change, and each routes its work through Actor.",
"items": [
"items": [
[
[
"fa-tower-broadcast",
"fa-tower-broadcast",
@@ -1627,7 +1740,7 @@
@@ -1627,7 +1740,7 @@
]
]
},
},
"connectTitle": "Reachable everywhere",
"connectTitle": "Reachable everywhere",
- "connectLead": "Your agent is part of the network, not a separate app.",
+ "connectLead": "Actor is part of the network, not a separate app.",
"connect": [
"connect": [
[
[
"fa-bars",
"fa-bars",
@@ -1643,13 +1756,13 @@
@@ -1643,13 +1756,13 @@
[
[
"fa-robot",
"fa-robot",
"With your robots",
"With your robots",
- "Give it a robot on OpenVibe.Bot to patrol, check on or perform with, with your approval.",
+ "Give an agent a robot on OpenVibe.Bot to patrol, check on or perform with, with your approval.",
"https://openvibe.bot"
"https://openvibe.bot"
],
],
[
[
"fa-plug",
"fa-plug",
"From your own apps",
"From your own apps",
- "An API, webhooks and an MCP server, so other assistants can use OpenVibe tools and talk to your agent.",
+ "An API, webhooks and an MCP server, so other assistants can hand tasks to Actor.",
"https://openvibe.codes"
"https://openvibe.codes"
]
]
],
],
@@ -1657,24 +1770,28 @@
@@ -1657,24 +1770,28 @@
},
},
"faq": [
"faq": [
[
[
- "How is this different from a chat assistant?",
- "It keeps working when you leave: it has memory, schedules and triggers, and it can act across OpenVibe with the permissions you give it."
+ "Is this like OpenRouter?",
+ "Yes, for agents: one API and one bill for many agent systems, with live prices and rankings. Actor routes whole tasks rather than single model calls, and it checks the results before you get them."
+ ],
+ [
+ "Which agent systems does it use?",
+ "OpenVibe's own runtime, hosted agent platforms from companies like OpenAI and Anthropic, coding agents, and open-source agents on OpenVibe's hardware. Each is an adapter, so new ones join quickly."
],
],
[
[
- "Can it do things without asking?",
- "Only what you allow. You grant each tool, and anything with consequences waits for your approval. Every action is logged, and you can stop an agent at any time."
+ "How does it choose?",
+ "For each kind of task it compares price, speed, success rate and current health across agent systems, then applies your mode and budget. Every choice is recorded and explained."
],
],
[
[
- "Which AI models does it use?",
- "Any model OpenVibe.AI routes to, including open and local models, or your own API key."
+ "Can I keep my data on OpenVibe?",
+ "Yes. Private mode uses only OpenVibe's own runtime and open models on its own hardware."
],
],
[
[
- "Can other apps use my agent?",
- "Yes: an API, webhooks and an MCP server connect it to other tools and assistants."
+ "Can it act without asking?",
+ "Only as far as you allow. Anything with consequences, like publishing, spending or moving a robot, waits for your approval, and every action is logged."
],
],
[
[
"What will it cost?",
"What will it cost?",
- "You will be able to start without paying, within limits published before launch; heavier use and bigger models will be paid."
+ "You will be able to start without paying, within limits published before launch; bigger tasks and stronger agents will be paid, with the cost shown per task."
]
]
]
]
},
},