openvibers/openvibe.sites Commits

openvibe-shared v1.28.1 (from its earlier pin): the account panel keeps its sections' height on phones, the codes mark at rest shows its V, no empty space under the footer on phones. npm test: deploy wrapper: all checks passed

OP OpenVibers committed 29 Sept 2026 · 81d44c2bec · 237 files, +594 −588


Changes

ddiff --git a/dist/_shared/footer.js b/dist/_shared/footer.js
iindex 3ac3d20..9c2d4ee 100644
---- a/dist/_shared/footer.js
++++ b/dist/_shared/footer.js
@@@ -364,8 +364,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/_shared/navbar.js b/dist/_shared/navbar.js
iindex 7de301b..50e0f49 100644
---- a/dist/_shared/navbar.js
++++ b/dist/_shared/navbar.js
@@@ -236,6 +236,10 @@
animation: openvibe-slide-down .2s ease;
}
.openvibe-navbar-dropdown.open { display: flex; }
++ /* The panel scrolls as a whole; its sections keep their height. A flex column lets children shrink by
++ default, which squeezed the accounts block into a sliver with its own scrollbar when the panel was
++ height-limited (phones). */
++ .openvibe-navbar-dropdown > * { flex-shrink: 0; }
/* Panels never leave the screen: dvh is the VISIBLE height on phones (100vh reaches behind the address
bar), the panel scrolls inside itself, and it is never wider than the viewport. */
.openvibe-navbar-dropdown, .ovnav-launcher {
@@@ -260,15 +264,15 @@
max-height: 140px; overflow-y: auto;
}
.openvibe-navbar-dropdown-accounts .account-item {
-- display: flex; align-items: center; gap: 8px; padding: 6px 8px;
-- border-radius: 6px; cursor: pointer; font-size: 12px;
-- color: var(--text-secondary, #b0b0b8); transition: background .12s;
++ display: flex; align-items: center; gap: 8px; padding: 8px;
++ border-radius: 6px; cursor: pointer; font-size: 12px; font-weight: 500;
++ color: var(--text-primary, #e0e0e0); transition: background .12s;
}
.openvibe-navbar-dropdown-accounts .account-item:hover { background: var(--bg-hover, #2f2f3d); }
.openvibe-navbar-dropdown-accounts .account-item img { width: 24px; height: 24px; border-radius: 50%; }
.openvibe-navbar-dropdown-accounts .account-item.active { color: var(--accent-light, #60a5fa); font-weight: 600; }
.openvibe-navbar-dropdown-accounts .add-account {
-- display: flex; align-items: center; gap: 8px; padding: 6px 8px;
++ display: flex; align-items: center; gap: 8px; padding: 8px;
border-radius: 6px; cursor: pointer; font-size: 12px;
color: var(--text-muted, #707080); transition: background .12s;
text-decoration: none;
@@@ -1405,11 +1409,11 @@
</div>
`).join('')}
<div class="account-item" data-account-id="anon" style="${isAnon ? 'display:none' : ''}">
-- <span style="width:24px;text-align:center">${navIcon('fa-user-secret')}</span>
++ <span style="width:18px;text-align:center">${navIcon('fa-user-secret')}</span>
<span>Switch to Anonymous</span>
</div>
<a class="add-account" id="openvibe-add-account" href="${escapeAttr(addAccountHref)}">
-- <span style="width:24px;text-align:center">${navIcon('fa-plus')}</span>
++ <span style="width:18px;text-align:center">${navIcon('fa-plus')}</span>
<span>Add another account</span>
</a>
</div>
ddiff --git a/dist/_shared/ov-mark.js b/dist/_shared/ov-mark.js
iindex 1cb2e62..e3ac07f 100644
---- a/dist/_shared/ov-mark.js
++++ b/dist/_shared/ov-mark.js
@@@ -58,7 +58,8 @@
.ov-mark:hover .c{animation-duration:.9s}
.ov-mark[data-static] svg,.ov-mark[data-static] .g,.ov-mark[data-static] .c,.ov-mark[data-static] .v,.ov-mark[data-static] .d{animation:none!important}
.ov-mark[data-static] .o{display:none}
--.ov-mark[data-ov]:not([data-ovm-run]) svg,.ov-mark[data-ov]:not([data-ovm-run]) .g,.ov-mark[data-ov]:not([data-ovm-run]) .c,.ov-mark[data-ov]:not([data-ovm-run]) .d,.ov-mark[data-ov][data-variant=codes]:not([data-ovm-run]) .v{animation-play-state:paused!important}
++.ov-mark[data-ov]:not([data-ovm-run]) svg,.ov-mark[data-ov]:not([data-ovm-run]) .g,.ov-mark[data-ov]:not([data-ovm-run]) .c,.ov-mark[data-ov]:not([data-ovm-run]) .d{animation-play-state:paused!important}
++.ov-mark[data-ov][data-variant=codes]:not([data-ovm-run]) .v{animation:none!important;stroke-dashoffset:0}
.ov-mark .p{fill:none;stroke:currentColor;stroke-width:4.4;stroke-linecap:round;transform:rotate(-90deg);transform-box:fill-box;transform-origin:center;stroke-dasharray:113.1;stroke-dashoffset:calc(113.1px * (1 - var(--ovm-p,0)));opacity:0;transition:stroke-dashoffset .35s cubic-bezier(.2,.8,.2,1),opacity .2s}
.ov-mark[data-progress] .p{opacity:1}
.ov-mark[data-progress] .c,.ov-mark[data-progress] .o{opacity:.25}
ddiff --git a/dist/_shared/release-watch.js b/dist/_shared/release-watch.js
iindex 2596037..cba1cd8 100644
---- a/dist/_shared/release-watch.js
++++ b/dist/_shared/release-watch.js
@@@ -6,9 +6,6 @@
* min_client_generation, the mixed-version window, contracts) and only when safe: hidden or idle 2 min, no
* focused field, nothing protected (form[data-dirty="true"], [data-ov-protected], playing media, a live
* camera/mic, OVProtected()). Outcomes and a 5-minute beat go to the metrics URL (D46).
-- * Release notifications (WS-P task 9): one anonymous EventSource on Events' realtime stream
-- * (host.release.published); a new release of this service runs check(true) after a 0-20 s jitter, at
-- * most every 30 s. Polling stays the fallback.
* OVReleaseConfig: { url, metricsUrl, updateUrl, inPlace: false, service, eventsUrl (false: off) }; the meta
* tag may carry data-service, data-events and data-generation. See README "Releases".
*/
@@@ -31,7 +28,7 @@
let prompted = false;
let mustReload = false; let reloadWhy = null;
let busyWith = null; // the plan/apply in flight
-- let pending = null; let waiting = []; let kinds = ''; let failedRelease = null; let lib = null;
++ let pending = null; let waiting = []; let kinds = ''; let failedRelease = null; let lib = null; let acct = 0;
let counts = {}; const totals = {}; const noted = {};
let session = null; let lastBeat = 0;
try { session = Array.from(root.crypto.getRandomValues(new Uint8Array(8)), (b) => (b | 256).toString(16).slice(1)).join(''); } catch { /* no beats */ }
@@@ -126,6 +123,7 @@
}
async function decide(m) {
++ const who = acct;
let x = null;
if (m.components || m.contract_ranges) { try { x = await loadUpdate(); } catch { record('failed', 'script'); flush(); } }
const page = base || { release: current, client_generation: gen };
@@@ -140,7 +138,9 @@
}
try {
kinds = Array.from(new Set(p.changed.map((c) => c.kind))).sort().join('+');
-- waiting = await x.apply(p, m, busy, record); pending = m;
++ // An account switch meanwhile (openvibe-auth-changed): fetch the regions again.
++ waiting = await x.apply(p, m, (s) => (who !== acct ? 'account' : busy(s)), record); pending = m;
++ if (who !== acct) { waiting = []; pending = null; return decide(m); }
if (!waiting.length) adopt(m);
} catch (why) {
waiting = []; pending = null;
@@@ -176,9 +176,9 @@
return m;
}
-- // ── Release notifications (host.release.published, public, via OpenVibe.Events) ──
-- // One credential-less EventSource per tab (account switches change nothing). Closed after 5 min hidden,
-- // reopened with last_event_id; errors back off 30 s to 15 min; after 6 failures only polling is left.
++ // ── Release notifications (host.release.published, public, via OpenVibe.Events; WS-P task 9) ──
++ // One credential-less EventSource per tab. Closed after 5 min hidden, reopened with last_event_id; errors
++ // back off 30 s to 15 min, after 6 failures only polling is left; online reconnects at once.
const TOPIC = 'host.release.published';
const HEX = /^[0-9a-f]{7,40}$/;
const rt = { state: 'off', service: null, url: null, events: 0, ignored: 0, checks: 0, failures: 0, lastSeq: null };
@@@ -220,7 +220,7 @@
later('retry', () => { if (document.hidden) rt.state = 'hidden'; else open(); }, Math.min(9e5, 3e4 * 2 ** (rt.failures - 1)) * (0.5 + Math.random() / 2));
}
function hide() { if (document.hidden && es) { close(); rt.state = 'hidden'; } }
-- // A Content-Security-Policy whose connect-src leaves Events out: one refusal, then polling only.
++ // A CSP whose connect-src leaves Events out: one refusal, then polling only.
document.addEventListener('securitypolicyviolation', (e) => {
try { if (!rt.url || String(e.blockedURI || '').indexOf(new URL(rt.url, root.location.href).origin) !== 0) return; } catch { return; }
close(); root.clearTimeout(t.retry); t.retry = null; rt.state = 'blocked';
@@@ -253,7 +253,8 @@
let stopped = false;
root.addEventListener('focus', () => { if (!stopped) check(false); });
-- root.addEventListener('online', () => { if (stopped) return; if (rt.state === 'failed') { rt.state = 'off'; rt.failures = 0; live(); } check(true); });
++ root.addEventListener('online', () => { if (stopped) return; if (rt.state === 'failed' || rt.state === 'backoff') { root.clearTimeout(t.retry); rt.state = 'off'; rt.failures = 0; live(); } check(true); });
++ root.addEventListener('openvibe-auth-changed', () => { acct++; if (!stopped && pending && !busyWith) { waiting = []; pending = null; consider(latest); } });
root.addEventListener('pagehide', () => flush(true, true));
document.addEventListener('visibilitychange', () => {
if (stopped) return;
ddiff --git a/dist/admin.openvibe.network/dmca.html b/dist/admin.openvibe.network/dmca.html
iindex fc130b0..07d2c93 100644
---- a/dist/admin.openvibe.network/dmca.html
++++ b/dist/admin.openvibe.network/dmca.html
@@@ -81,8 +81,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/admin.openvibe.network/index.html b/dist/admin.openvibe.network/index.html
iindex f7724da..690908a 100644
---- a/dist/admin.openvibe.network/index.html
++++ b/dist/admin.openvibe.network/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="admin.openvibe.network — One operator console for every service.">
<meta name="twitter:description" content="admin.openvibe.network will be the federated operator console: users, roles, bans, registry and policy, event queues, storage, billing, migrations and emergency controls, discovered from each service rather than hard-wired.">
<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://admin.openvibe.network/#site","url":"https://admin.openvibe.network/","name":"admin.openvibe.network","description":"admin.openvibe.network will be the federated operator console: users, roles, bans, registry and policy, event queues, storage, billing, migrations and emergency controls, discovered from each service rather than hard-wired.","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://admin.openvibe.network/#page","url":"https://admin.openvibe.network/","name":"admin.openvibe.network — One operator console for every service.","description":"admin.openvibe.network will be the federated operator console: users, roles, bans, registry and policy, event queues, storage, billing, migrations and emergency controls, discovered from each service rather than hard-wired.","isPartOf":{"@id":"https://admin.openvibe.network/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-28","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"admin.openvibe.network","item":"https://admin.openvibe.network/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://admin.openvibe.network/#site","url":"https://admin.openvibe.network/","name":"admin.openvibe.network","description":"admin.openvibe.network will be the federated operator console: users, roles, bans, registry and policy, event queues, storage, billing, migrations and emergency controls, discovered from each service rather than hard-wired.","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://admin.openvibe.network/#page","url":"https://admin.openvibe.network/","name":"admin.openvibe.network — One operator console for every service.","description":"admin.openvibe.network will be the federated operator console: users, roles, bans, registry and policy, event queues, storage, billing, migrations and emergency controls, discovered from each service rather than hard-wired.","isPartOf":{"@id":"https://admin.openvibe.network/#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":"admin.openvibe.network","item":"https://admin.openvibe.network/"}]}}]}</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=d9b9af081efe" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -230,8 +230,8 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
@@@ -273,9 +273,9 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</span>
</div>
</div></footer>
--<script src="/shared/ov-mark.js?v=96079ebf2943" async></script>
--<script src="/shared/navbar.js?v=b50d9f47fc34"></script>
--<script src="/shared/footer.js?v=b99e512398d5"></script>
++<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
++<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
if (window.OpenVibeNavbar) { try { OpenVibeNavbar.init({ service: 'admin', apiBase: 'https://openvibe.network', links: [{ label: 'What it will be', href: '#what' }, { label: 'The network', href: 'https://openvibe.network/#network', external: false }], history: { type: 'page', title: 'admin.openvibe.network' } }); } catch (e) {} }
ddiff --git a/dist/admin.openvibe.network/privacy.html b/dist/admin.openvibe.network/privacy.html
iindex 7047b77..d30fbcb 100644
---- a/dist/admin.openvibe.network/privacy.html
++++ b/dist/admin.openvibe.network/privacy.html
@@@ -86,8 +86,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/admin.openvibe.network/release.json b/dist/admin.openvibe.network/release.json
iindex 6a61dc8..7030162 100644
---- a/dist/admin.openvibe.network/release.json
++++ b/dist/admin.openvibe.network/release.json
@@@ -1,11 +1,11 @@
{
"service": "admin",
-- "release": "16d875a081f5",
-- "released_at": "2026-09-28T00:00:00.000Z",
++ "release": "45530c67b948",
++ "released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.23.0"
++ "openvibe-shared": "1.28.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/admin.openvibe.network/sitemap.xml b/dist/admin.openvibe.network/sitemap.xml
iindex 90ef257..a7d66d4 100644
---- a/dist/admin.openvibe.network/sitemap.xml
++++ b/dist/admin.openvibe.network/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://admin.openvibe.network/</loc><lastmod>2026-09-28</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://admin.openvibe.network/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/admin.openvibe.network/status.json b/dist/admin.openvibe.network/status.json
iindex fd03f22..bd76763 100644
---- a/dist/admin.openvibe.network/status.json
++++ b/dist/admin.openvibe.network/status.json
@@@ -18,6 +18,6 @@
"launchWaitsFor": null,
"factsAsOf": "2026-09-28",
"network": "https://openvibe.network",
-- "updated": "2026-09-28",
++ "updated": "2026-09-29",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/admin.openvibe.network/terms.html b/dist/admin.openvibe.network/terms.html
iindex 6407aea..9d02618 100644
---- a/dist/admin.openvibe.network/terms.html
++++ b/dist/admin.openvibe.network/terms.html
@@@ -86,8 +86,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/ai.openvibe.network/dmca.html b/dist/ai.openvibe.network/dmca.html
iindex 5d78a83..9bd9fa4 100644
---- a/dist/ai.openvibe.network/dmca.html
++++ b/dist/ai.openvibe.network/dmca.html
@@@ -80,8 +80,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/ai.openvibe.network/index.html b/dist/ai.openvibe.network/index.html
iindex 2bba92a..549d050 100644
---- a/dist/ai.openvibe.network/index.html
++++ b/dist/ai.openvibe.network/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="ai.openvibe.network — Moved: OpenVibe.AI&#39;s public home is ai.openvibe.services.">
<meta name="twitter:description" content="OpenVibe.AI&#39;s public address is now ai.openvibe.services, next to the rest of the network&#39;s programmable services on OpenVibe.Services. This address serves only this notice until every client has moved; then it redirects.">
<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://ai.openvibe.network/#site","url":"https://ai.openvibe.network/","name":"ai.openvibe.network","description":"OpenVibe.AI's public address is now ai.openvibe.services, next to the rest of the network's programmable services on OpenVibe.Services. This address serves only this notice until every client has moved; then it redirects.","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://ai.openvibe.network/#page","url":"https://ai.openvibe.network/","name":"ai.openvibe.network — Moved: OpenVibe.AI's public home is ai.openvibe.services.","description":"OpenVibe.AI's public address is now ai.openvibe.services, next to the rest of the network's programmable services on OpenVibe.Services. This address serves only this notice until every client has moved; then it redirects.","isPartOf":{"@id":"https://ai.openvibe.network/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-28","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"ai.openvibe.network","item":"https://ai.openvibe.network/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://ai.openvibe.network/#site","url":"https://ai.openvibe.network/","name":"ai.openvibe.network","description":"OpenVibe.AI's public address is now ai.openvibe.services, next to the rest of the network's programmable services on OpenVibe.Services. This address serves only this notice until every client has moved; then it redirects.","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://ai.openvibe.network/#page","url":"https://ai.openvibe.network/","name":"ai.openvibe.network — Moved: OpenVibe.AI's public home is ai.openvibe.services.","description":"OpenVibe.AI's public address is now ai.openvibe.services, next to the rest of the network's programmable services on OpenVibe.Services. This address serves only this notice until every client has moved; then it redirects.","isPartOf":{"@id":"https://ai.openvibe.network/#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":"ai.openvibe.network","item":"https://ai.openvibe.network/"}]}}]}</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=d9b9af081efe" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -220,8 +220,8 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
@@@ -263,9 +263,9 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</span>
</div>
</div></footer>
--<script src="/shared/ov-mark.js?v=96079ebf2943" async></script>
--<script src="/shared/navbar.js?v=b50d9f47fc34"></script>
--<script src="/shared/footer.js?v=b99e512398d5"></script>
++<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
++<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
if (window.OpenVibeNavbar) { try { OpenVibeNavbar.init({ service: 'ai', apiBase: 'https://openvibe.network', links: [{ label: 'Where to go', href: '#what' }, { label: 'The network', href: 'https://openvibe.network/#network', external: false }], history: { type: 'page', title: 'ai.openvibe.network' } }); } catch (e) {} }
ddiff --git a/dist/ai.openvibe.network/privacy.html b/dist/ai.openvibe.network/privacy.html
iindex aac0c6e..c289ed8 100644
---- a/dist/ai.openvibe.network/privacy.html
++++ b/dist/ai.openvibe.network/privacy.html
@@@ -86,8 +86,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/ai.openvibe.network/release.json b/dist/ai.openvibe.network/release.json
iindex c89dd71..e040186 100644
---- a/dist/ai.openvibe.network/release.json
++++ b/dist/ai.openvibe.network/release.json
@@@ -1,11 +1,11 @@
{
"service": "ai",
-- "release": "8c1a78141dc0",
-- "released_at": "2026-09-28T00:00:00.000Z",
++ "release": "3fa34cbeed67",
++ "released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.23.0"
++ "openvibe-shared": "1.28.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/ai.openvibe.network/status.json b/dist/ai.openvibe.network/status.json
iindex 2985e38..41d096f 100644
---- a/dist/ai.openvibe.network/status.json
++++ b/dist/ai.openvibe.network/status.json
@@@ -18,6 +18,6 @@
"launchWaitsFor": null,
"factsAsOf": "2026-09-28",
"network": "https://openvibe.network",
-- "updated": "2026-09-28",
++ "updated": "2026-09-29",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/ai.openvibe.network/terms.html b/dist/ai.openvibe.network/terms.html
iindex 2bd0690..4f30a65 100644
---- a/dist/ai.openvibe.network/terms.html
++++ b/dist/ai.openvibe.network/terms.html
@@@ -85,8 +85,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/ai.openvibe.services/dmca.html b/dist/ai.openvibe.services/dmca.html
iindex 6d08e54..7ad6b15 100644
---- a/dist/ai.openvibe.services/dmca.html
++++ b/dist/ai.openvibe.services/dmca.html
@@@ -80,8 +80,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/ai.openvibe.services/index.html b/dist/ai.openvibe.services/index.html
iindex 5fe81ae..62e404f 100644
---- a/dist/ai.openvibe.services/index.html
++++ b/dist/ai.openvibe.services/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="ai.openvibe.services — One AI gateway for every model you choose.">
<meta name="twitter:description" content="OpenVibe.AI is the network&#39;s AI gateway: OpenAI-compatible providers, Anthropic, local and open models behind one API, with routing for cost, speed, quality or privacy, provider fallback, versioned prompt templates and typed workflows, durable runs, structured output, embeddings, speech to text and media analysis, budgets and your own provider keys. It runs today as an internal service that OpenVibe.Live and OpenVibe.Network call; its public API and playground open here.">
<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://ai.openvibe.services/#site","url":"https://ai.openvibe.services/","name":"ai.openvibe.services","description":"OpenVibe.AI is the network's AI gateway: OpenAI-compatible providers, Anthropic, local and open models behind one API, with routing for cost, speed, quality or privacy, provider fallback, versioned prompt templates and typed workflows, durable runs, structured output, embeddings, speech to text and media analysis, budgets and your own provider keys. It runs today as an internal service that OpenVibe.Live and OpenVibe.Network call; its public API and playground open here.","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://ai.openvibe.services/#page","url":"https://ai.openvibe.services/","name":"ai.openvibe.services — One AI gateway for every model you choose.","description":"OpenVibe.AI is the network's AI gateway: OpenAI-compatible providers, Anthropic, local and open models behind one API, with routing for cost, speed, quality or privacy, provider fallback, versioned prompt templates and typed workflows, durable runs, structured output, embeddings, speech to text and media analysis, budgets and your own provider keys. It runs today as an internal service that OpenVibe.Live and OpenVibe.Network call; its public API and playground open here.","isPartOf":{"@id":"https://ai.openvibe.services/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-28","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"ai.openvibe.services","item":"https://ai.openvibe.services/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://ai.openvibe.services/#site","url":"https://ai.openvibe.services/","name":"ai.openvibe.services","description":"OpenVibe.AI is the network's AI gateway: OpenAI-compatible providers, Anthropic, local and open models behind one API, with routing for cost, speed, quality or privacy, provider fallback, versioned prompt templates and typed workflows, durable runs, structured output, embeddings, speech to text and media analysis, budgets and your own provider keys. It runs today as an internal service that OpenVibe.Live and OpenVibe.Network call; its public API and playground open here.","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://ai.openvibe.services/#page","url":"https://ai.openvibe.services/","name":"ai.openvibe.services — One AI gateway for every model you choose.","description":"OpenVibe.AI is the network's AI gateway: OpenAI-compatible providers, Anthropic, local and open models behind one API, with routing for cost, speed, quality or privacy, provider fallback, versioned prompt templates and typed workflows, durable runs, structured output, embeddings, speech to text and media analysis, budgets and your own provider keys. It runs today as an internal service that OpenVibe.Live and OpenVibe.Network call; its public API and playground open here.","isPartOf":{"@id":"https://ai.openvibe.services/#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":"ai.openvibe.services","item":"https://ai.openvibe.services/"}]}}]}</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=d9b9af081efe" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -230,8 +230,8 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
@@@ -273,9 +273,9 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</span>
</div>
</div></footer>
--<script src="/shared/ov-mark.js?v=96079ebf2943" async></script>
--<script src="/shared/navbar.js?v=b50d9f47fc34"></script>
--<script src="/shared/footer.js?v=b99e512398d5"></script>
++<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
++<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
if (window.OpenVibeNavbar) { try { OpenVibeNavbar.init({ service: 'ai', apiBase: 'https://openvibe.network', links: [{ label: 'What it will be', href: '#what' }, { label: 'The network', href: 'https://openvibe.network/#network', external: false }], history: { type: 'page', title: 'ai.openvibe.services' } }); } catch (e) {} }
ddiff --git a/dist/ai.openvibe.services/privacy.html b/dist/ai.openvibe.services/privacy.html
iindex 7950184..a39bafd 100644
---- a/dist/ai.openvibe.services/privacy.html
++++ b/dist/ai.openvibe.services/privacy.html
@@@ -86,8 +86,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/ai.openvibe.services/release.json b/dist/ai.openvibe.services/release.json
iindex 70e535b..f826d84 100644
---- a/dist/ai.openvibe.services/release.json
++++ b/dist/ai.openvibe.services/release.json
@@@ -1,11 +1,11 @@
{
"service": "ai",
-- "release": "1322a55d96ef",
-- "released_at": "2026-09-28T00:00:00.000Z",
++ "release": "b04c87bc23ef",
++ "released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.23.0"
++ "openvibe-shared": "1.28.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/ai.openvibe.services/sitemap.xml b/dist/ai.openvibe.services/sitemap.xml
iindex d06ebeb..54bcba3 100644
---- a/dist/ai.openvibe.services/sitemap.xml
++++ b/dist/ai.openvibe.services/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://ai.openvibe.services/</loc><lastmod>2026-09-28</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://ai.openvibe.services/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/ai.openvibe.services/status.json b/dist/ai.openvibe.services/status.json
iindex f9ae9d3..65fd1ca 100644
---- a/dist/ai.openvibe.services/status.json
++++ b/dist/ai.openvibe.services/status.json
@@@ -18,6 +18,6 @@
"launchWaitsFor": "a public API with its own keys, quotas and playground; today only other OpenVibe services call it",
"factsAsOf": "2026-09-28",
"network": "https://openvibe.network",
-- "updated": "2026-09-28",
++ "updated": "2026-09-29",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/ai.openvibe.services/terms.html b/dist/ai.openvibe.services/terms.html
iindex aaf878c..7f0d6ef 100644
---- a/dist/ai.openvibe.services/terms.html
++++ b/dist/ai.openvibe.services/terms.html
@@@ -85,8 +85,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/api.openvibe.network/dmca.html b/dist/api.openvibe.network/dmca.html
iindex 0c46914..6b77462 100644
---- a/dist/api.openvibe.network/dmca.html
++++ b/dist/api.openvibe.network/dmca.html
@@@ -80,8 +80,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/api.openvibe.network/index.html b/dist/api.openvibe.network/index.html
iindex 789e4fe..51623c6 100644
---- a/dist/api.openvibe.network/index.html
++++ b/dist/api.openvibe.network/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="api.openvibe.network — The network, machine-readable.">
<meta name="twitter:description" content="api.openvibe.network is the planned home of the network&#39;s public APIs. The ecosystem registry (services, capabilities, event topics, namespaces and releases, backed by the OpenVibe contracts) already answers on openvibe.network; this subdomain is not routed to it yet.">
<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://api.openvibe.network/#site","url":"https://api.openvibe.network/","name":"api.openvibe.network","description":"api.openvibe.network is the planned home of the network's public APIs. The ecosystem registry (services, capabilities, event topics, namespaces and releases, backed by the OpenVibe contracts) already answers on openvibe.network; this subdomain is not routed to it yet.","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://api.openvibe.network/#page","url":"https://api.openvibe.network/","name":"api.openvibe.network — The network, machine-readable.","description":"api.openvibe.network is the planned home of the network's public APIs. The ecosystem registry (services, capabilities, event topics, namespaces and releases, backed by the OpenVibe contracts) already answers on openvibe.network; this subdomain is not routed to it yet.","isPartOf":{"@id":"https://api.openvibe.network/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-28","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"api.openvibe.network","item":"https://api.openvibe.network/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://api.openvibe.network/#site","url":"https://api.openvibe.network/","name":"api.openvibe.network","description":"api.openvibe.network is the planned home of the network's public APIs. The ecosystem registry (services, capabilities, event topics, namespaces and releases, backed by the OpenVibe contracts) already answers on openvibe.network; this subdomain is not routed to it yet.","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://api.openvibe.network/#page","url":"https://api.openvibe.network/","name":"api.openvibe.network — The network, machine-readable.","description":"api.openvibe.network is the planned home of the network's public APIs. The ecosystem registry (services, capabilities, event topics, namespaces and releases, backed by the OpenVibe contracts) already answers on openvibe.network; this subdomain is not routed to it yet.","isPartOf":{"@id":"https://api.openvibe.network/#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":"api.openvibe.network","item":"https://api.openvibe.network/"}]}}]}</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=d9b9af081efe" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -232,8 +232,8 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
@@@ -275,9 +275,9 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</span>
</div>
</div></footer>
--<script src="/shared/ov-mark.js?v=96079ebf2943" async></script>
--<script src="/shared/navbar.js?v=b50d9f47fc34"></script>
--<script src="/shared/footer.js?v=b99e512398d5"></script>
++<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
++<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
if (window.OpenVibeNavbar) { try { OpenVibeNavbar.init({ service: 'api', apiBase: 'https://openvibe.network', links: [{ label: 'What it will be', href: '#what' }, { label: 'The network', href: 'https://openvibe.network/#network', external: false }], history: { type: 'page', title: 'api.openvibe.network' } }); } catch (e) {} }
ddiff --git a/dist/api.openvibe.network/privacy.html b/dist/api.openvibe.network/privacy.html
iindex 1dc1aa1..9bceb1d 100644
---- a/dist/api.openvibe.network/privacy.html
++++ b/dist/api.openvibe.network/privacy.html
@@@ -86,8 +86,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/api.openvibe.network/release.json b/dist/api.openvibe.network/release.json
iindex ef5b7a2..f90fbe8 100644
---- a/dist/api.openvibe.network/release.json
++++ b/dist/api.openvibe.network/release.json
@@@ -1,11 +1,11 @@
{
"service": "api",
-- "release": "0318aeb80c40",
-- "released_at": "2026-09-28T00:00:00.000Z",
++ "release": "d95c25e35a95",
++ "released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.23.0"
++ "openvibe-shared": "1.28.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/api.openvibe.network/sitemap.xml b/dist/api.openvibe.network/sitemap.xml
iindex 32aac6b..9fe2624 100644
---- a/dist/api.openvibe.network/sitemap.xml
++++ b/dist/api.openvibe.network/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://api.openvibe.network/</loc><lastmod>2026-09-28</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://api.openvibe.network/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/api.openvibe.network/status.json b/dist/api.openvibe.network/status.json
iindex 97afeec..d456cf4 100644
---- a/dist/api.openvibe.network/status.json
++++ b/dist/api.openvibe.network/status.json
@@@ -18,6 +18,6 @@
"launchWaitsFor": null,
"factsAsOf": "2026-09-28",
"network": "https://openvibe.network",
-- "updated": "2026-09-28",
++ "updated": "2026-09-29",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/api.openvibe.network/terms.html b/dist/api.openvibe.network/terms.html
iindex 0fcf892..d609218 100644
---- a/dist/api.openvibe.network/terms.html
++++ b/dist/api.openvibe.network/terms.html
@@@ -85,8 +85,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/auth.openvibe.network/dmca.html b/dist/auth.openvibe.network/dmca.html
iindex 67b1ecf..4bb8865 100644
---- a/dist/auth.openvibe.network/dmca.html
++++ b/dist/auth.openvibe.network/dmca.html
@@@ -81,8 +81,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/auth.openvibe.network/index.html b/dist/auth.openvibe.network/index.html
iindex d2234eb..9a00806 100644
---- a/dist/auth.openvibe.network/index.html
++++ b/dist/auth.openvibe.network/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="auth.openvibe.network — Sign in, once, for the whole network.">
<meta name="twitter:description" content="auth.openvibe.network will be the dedicated home of OpenVibe identity: sign-in, registration, OAuth 2.0 / OpenID Connect for apps, sessions and linked accounts. Today all of this runs inside openvibe.network itself.">
<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://auth.openvibe.network/#site","url":"https://auth.openvibe.network/","name":"auth.openvibe.network","description":"auth.openvibe.network will be the dedicated home of OpenVibe identity: sign-in, registration, OAuth 2.0 / OpenID Connect for apps, sessions and linked accounts. Today all of this runs inside openvibe.network itself.","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://auth.openvibe.network/#page","url":"https://auth.openvibe.network/","name":"auth.openvibe.network — Sign in, once, for the whole network.","description":"auth.openvibe.network will be the dedicated home of OpenVibe identity: sign-in, registration, OAuth 2.0 / OpenID Connect for apps, sessions and linked accounts. Today all of this runs inside openvibe.network itself.","isPartOf":{"@id":"https://auth.openvibe.network/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-28","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"auth.openvibe.network","item":"https://auth.openvibe.network/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://auth.openvibe.network/#site","url":"https://auth.openvibe.network/","name":"auth.openvibe.network","description":"auth.openvibe.network will be the dedicated home of OpenVibe identity: sign-in, registration, OAuth 2.0 / OpenID Connect for apps, sessions and linked accounts. Today all of this runs inside openvibe.network itself.","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://auth.openvibe.network/#page","url":"https://auth.openvibe.network/","name":"auth.openvibe.network — Sign in, once, for the whole network.","description":"auth.openvibe.network will be the dedicated home of OpenVibe identity: sign-in, registration, OAuth 2.0 / OpenID Connect for apps, sessions and linked accounts. Today all of this runs inside openvibe.network itself.","isPartOf":{"@id":"https://auth.openvibe.network/#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":"auth.openvibe.network","item":"https://auth.openvibe.network/"}]}}]}</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=d9b9af081efe" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -231,8 +231,8 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
@@@ -274,9 +274,9 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</span>
</div>
</div></footer>
--<script src="/shared/ov-mark.js?v=96079ebf2943" async></script>
--<script src="/shared/navbar.js?v=b50d9f47fc34"></script>
--<script src="/shared/footer.js?v=b99e512398d5"></script>
++<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
++<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
if (window.OpenVibeNavbar) { try { OpenVibeNavbar.init({ service: 'auth', apiBase: 'https://openvibe.network', links: [{ label: 'What it will be', href: '#what' }, { label: 'The network', href: 'https://openvibe.network/#network', external: false }], history: { type: 'page', title: 'auth.openvibe.network' } }); } catch (e) {} }
ddiff --git a/dist/auth.openvibe.network/privacy.html b/dist/auth.openvibe.network/privacy.html
iindex 12d8d12..09a511e 100644
---- a/dist/auth.openvibe.network/privacy.html
++++ b/dist/auth.openvibe.network/privacy.html
@@@ -86,8 +86,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/auth.openvibe.network/release.json b/dist/auth.openvibe.network/release.json
iindex 6160c50..4eaaa2f 100644
---- a/dist/auth.openvibe.network/release.json
++++ b/dist/auth.openvibe.network/release.json
@@@ -1,11 +1,11 @@
{
"service": "auth",
-- "release": "77f72b4d9a9e",
-- "released_at": "2026-09-28T00:00:00.000Z",
++ "release": "fc6b743909e3",
++ "released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.23.0"
++ "openvibe-shared": "1.28.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/auth.openvibe.network/sitemap.xml b/dist/auth.openvibe.network/sitemap.xml
iindex e9f88b3..6366064 100644
---- a/dist/auth.openvibe.network/sitemap.xml
++++ b/dist/auth.openvibe.network/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://auth.openvibe.network/</loc><lastmod>2026-09-28</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://auth.openvibe.network/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/auth.openvibe.network/status.json b/dist/auth.openvibe.network/status.json
iindex f7928f9..c46ce96 100644
---- a/dist/auth.openvibe.network/status.json
++++ b/dist/auth.openvibe.network/status.json
@@@ -18,6 +18,6 @@
"launchWaitsFor": null,
"factsAsOf": "2026-09-28",
"network": "https://openvibe.network",
-- "updated": "2026-09-28",
++ "updated": "2026-09-29",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/auth.openvibe.network/terms.html b/dist/auth.openvibe.network/terms.html
iindex 9bff05b..631cd70 100644
---- a/dist/auth.openvibe.network/terms.html
++++ b/dist/auth.openvibe.network/terms.html
@@@ -86,8 +86,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openre.stream/dmca.html b/dist/openre.stream/dmca.html
iindex 7322493..3896b7d 100644
---- a/dist/openre.stream/dmca.html
++++ b/dist/openre.stream/dmca.html
@@@ -81,8 +81,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openre.stream/index.html b/dist/openre.stream/index.html
iindex 8081608..d83bd52 100644
---- a/dist/openre.stream/index.html
++++ b/dist/openre.stream/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenRe.Stream — Go live from your browser, or any encoder, and restream everywhere.">
<meta name="twitter:description" content="OpenRe.Stream is OpenVibe&#39;s open streaming engine, split out of OpenVibe.Live. Go live from a web browser with no OBS, no downloads and no follower minimum, or send RTMP or WHIP from any encoder, and restream to Twitch, YouTube, Kick and any RTMP, RTMPS or SRT destination. Browser broadcasts start on OpenVibe.Live today, and move to OpenRe.Stream ingest channel by channel.">
<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://openre.stream/#site","url":"https://openre.stream/","name":"OpenRe.Stream","description":"OpenRe.Stream is OpenVibe's open streaming engine, split out of OpenVibe.Live. Go live from a web browser with no OBS, no downloads and no follower minimum, or send RTMP or WHIP from any encoder, and restream to Twitch, YouTube, Kick and any RTMP, RTMPS or SRT destination. Browser broadcasts start on OpenVibe.Live today, and move to OpenRe.Stream ingest channel by channel.","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://openre.stream/#page","url":"https://openre.stream/","name":"OpenRe.Stream — Go live from your browser, or any encoder, and restream everywhere.","description":"OpenRe.Stream is OpenVibe's open streaming engine, split out of OpenVibe.Live. Go live from a web browser with no OBS, no downloads and no follower minimum, or send RTMP or WHIP from any encoder, and restream to Twitch, YouTube, Kick and any RTMP, RTMPS or SRT destination. Browser broadcasts start on OpenVibe.Live today, and move to OpenRe.Stream ingest channel by channel.","isPartOf":{"@id":"https://openre.stream/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-28","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenRe.Stream","item":"https://openre.stream/"}]}},{"@type":"FAQPage","@id":"https://openre.stream/#faq","mainEntity":[{"@type":"Question","name":"Can I stream without OBS?","acceptedAnswer":{"@type":"Answer","text":"Yes. Go live from your browser on OpenVibe.Live: press Go Live, allow your camera and microphone, and you are live. There is nothing to install."}},{"@type":"Question","name":"Do I need followers or subscribers to go live?","acceptedAnswer":{"@type":"Answer","text":"No. Every OpenVibe account can go live from the first minute, with no follower, subscriber or past-stream requirement."}},{"@type":"Question","name":"Can I stream from a Chromebook or a phone?","acceptedAnswer":{"@type":"Answer","text":"Yes. The broadcaster runs in Chrome, Edge, Firefox and Safari, on ChromeOS, Android and iOS as well as Windows, macOS and Linux."}},{"@type":"Question","name":"Can I restream to Twitch, YouTube and Kick at the same time?","acceptedAnswer":{"@type":"Answer","text":"Yes. One broadcast can go to Twitch, YouTube, Kick and any RTMP, RTMPS or SRT server at once."}},{"@type":"Question","name":"Can I use OBS if I want to?","acceptedAnswer":{"@type":"Answer","text":"Yes. OBS and any RTMP encoder work, and so do WHIP encoders (OBS 30 and later, ffmpeg, GStreamer)."}}]}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openre.stream/#site","url":"https://openre.stream/","name":"OpenRe.Stream","description":"OpenRe.Stream is OpenVibe's open streaming engine, split out of OpenVibe.Live. Go live from a web browser with no OBS, no downloads and no follower minimum, or send RTMP or WHIP from any encoder, and restream to Twitch, YouTube, Kick and any RTMP, RTMPS or SRT destination. Browser broadcasts start on OpenVibe.Live today, and move to OpenRe.Stream ingest channel by channel.","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://openre.stream/#page","url":"https://openre.stream/","name":"OpenRe.Stream — Go live from your browser, or any encoder, and restream everywhere.","description":"OpenRe.Stream is OpenVibe's open streaming engine, split out of OpenVibe.Live. Go live from a web browser with no OBS, no downloads and no follower minimum, or send RTMP or WHIP from any encoder, and restream to Twitch, YouTube, Kick and any RTMP, RTMPS or SRT destination. Browser broadcasts start on OpenVibe.Live today, and move to OpenRe.Stream ingest channel by channel.","isPartOf":{"@id":"https://openre.stream/#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":"OpenRe.Stream","item":"https://openre.stream/"}]}},{"@type":"FAQPage","@id":"https://openre.stream/#faq","mainEntity":[{"@type":"Question","name":"Can I stream without OBS?","acceptedAnswer":{"@type":"Answer","text":"Yes. Go live from your browser on OpenVibe.Live: press Go Live, allow your camera and microphone, and you are live. There is nothing to install."}},{"@type":"Question","name":"Do I need followers or subscribers to go live?","acceptedAnswer":{"@type":"Answer","text":"No. Every OpenVibe account can go live from the first minute, with no follower, subscriber or past-stream requirement."}},{"@type":"Question","name":"Can I stream from a Chromebook or a phone?","acceptedAnswer":{"@type":"Answer","text":"Yes. The broadcaster runs in Chrome, Edge, Firefox and Safari, on ChromeOS, Android and iOS as well as Windows, macOS and Linux."}},{"@type":"Question","name":"Can I restream to Twitch, YouTube and Kick at the same time?","acceptedAnswer":{"@type":"Answer","text":"Yes. One broadcast can go to Twitch, YouTube, Kick and any RTMP, RTMPS or SRT server at once."}},{"@type":"Question","name":"Can I use OBS if I want to?","acceptedAnswer":{"@type":"Answer","text":"Yes. OBS and any RTMP encoder work, and so do WHIP encoders (OBS 30 and later, ffmpeg, GStreamer)."}}]}]}</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=d9b9af081efe" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -246,8 +246,8 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
@@@ -289,9 +289,9 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</span>
</div>
</div></footer>
--<script src="/shared/ov-mark.js?v=96079ebf2943" async></script>
--<script src="/shared/navbar.js?v=b50d9f47fc34"></script>
--<script src="/shared/footer.js?v=b99e512398d5"></script>
++<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
++<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
if (window.OpenVibeNavbar) { try { OpenVibeNavbar.init({ service: 'stream', apiBase: 'https://openvibe.network', links: [{ label: 'What it will be', href: '#what' }, { label: 'The network', href: 'https://openvibe.network/#network', external: false }], history: { type: 'page', title: 'OpenRe.Stream' } }); } catch (e) {} }
ddiff --git a/dist/openre.stream/privacy.html b/dist/openre.stream/privacy.html
iindex ab068d1..72b164d 100644
---- a/dist/openre.stream/privacy.html
++++ b/dist/openre.stream/privacy.html
@@@ -86,8 +86,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openre.stream/release.json b/dist/openre.stream/release.json
iindex d5ab279..bf82eb4 100644
---- a/dist/openre.stream/release.json
++++ b/dist/openre.stream/release.json
@@@ -1,11 +1,11 @@
{
"service": "stream",
-- "release": "838884422d05",
-- "released_at": "2026-09-28T00:00:00.000Z",
++ "release": "019dda87ab8d",
++ "released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.23.0"
++ "openvibe-shared": "1.28.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openre.stream/sitemap.xml b/dist/openre.stream/sitemap.xml
iindex df642f3..7184ab8 100644
---- a/dist/openre.stream/sitemap.xml
++++ b/dist/openre.stream/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openre.stream/</loc><lastmod>2026-09-28</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openre.stream/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openre.stream/status.json b/dist/openre.stream/status.json
iindex 435ab83..09358c0 100644
---- a/dist/openre.stream/status.json
++++ b/dist/openre.stream/status.json
@@@ -18,6 +18,6 @@
"launchWaitsFor": "the stream slots to move from OpenVibe.Live's ingest to OpenRe.Stream, one at a time; no stream uses it yet",
"factsAsOf": "2026-09-28",
"network": "https://openvibe.network",
-- "updated": "2026-09-28",
++ "updated": "2026-09-29",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openre.stream/terms.html b/dist/openre.stream/terms.html
iindex f2265ab..1a3b050 100644
---- a/dist/openre.stream/terms.html
++++ b/dist/openre.stream/terms.html
@@@ -88,8 +88,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.actor/dmca.html b/dist/openvibe.actor/dmca.html
iindex a6762f0..615f19f 100644
---- a/dist/openvibe.actor/dmca.html
++++ b/dist/openvibe.actor/dmca.html
@@@ -80,8 +80,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.actor/index.html b/dist/openvibe.actor/index.html
iindex dfacbe7..fadeed7 100644
---- a/dist/openvibe.actor/index.html
++++ b/dist/openvibe.actor/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Actor — AI agents that act for you, with your permission.">
<meta name="twitter:description" content="OpenVibe.Actor will give you persistent AI agents that work across OpenVibe and, when you allow it, other sites and apps: they use OpenVibe&#39;s own APIs first and a sandboxed browser when they must. You decide what each agent may do, for once, a session, a while or always, and anything with real consequences (buying, sending, publishing, applying, moving a robot) waits for your approval, wherever you are on the 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 will give you persistent AI agents that work across OpenVibe and, when you allow it, other sites and apps: they use OpenVibe's own APIs first and a sandboxed browser when they must. You decide what each agent may do, for once, a session, a while or always, and anything with real consequences (buying, sending, publishing, applying, moving a robot) waits for your approval, wherever you are on the 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 — AI agents that act for you, with your permission.","description":"OpenVibe.Actor will give you persistent AI agents that work across OpenVibe and, when you allow it, other sites and apps: they use OpenVibe's own APIs first and a sandboxed browser when they must. You decide what each agent may do, for once, a session, a while or always, and anything with real consequences (buying, sending, publishing, applying, moving a robot) waits for your approval, wherever you are on the network.","isPartOf":{"@id":"https://openvibe.actor/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-28","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/"}]}}]}</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 will give you persistent AI agents that work across OpenVibe and, when you allow it, other sites and apps: they use OpenVibe's own APIs first and a sandboxed browser when they must. You decide what each agent may do, for once, a session, a while or always, and anything with real consequences (buying, sending, publishing, applying, moving a robot) waits for your approval, wherever you are on the 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 — AI agents that act for you, with your permission.","description":"OpenVibe.Actor will give you persistent AI agents that work across OpenVibe and, when you allow it, other sites and apps: they use OpenVibe's own APIs first and a sandboxed browser when they must. You decide what each agent may do, for once, a session, a while or always, and anything with real consequences (buying, sending, publishing, applying, moving a robot) waits for your approval, wherever you are on the 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/"}]}}]}</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=d9b9af081efe" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -231,8 +231,8 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
@@@ -274,9 +274,9 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</span>
</div>
</div></footer>
--<script src="/shared/ov-mark.js?v=96079ebf2943" async></script>
--<script src="/shared/navbar.js?v=b50d9f47fc34"></script>
--<script src="/shared/footer.js?v=b99e512398d5"></script>
++<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
++<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
if (window.OpenVibeNavbar) { try { OpenVibeNavbar.init({ service: 'actor', apiBase: 'https://openvibe.network', links: [{ label: 'What it will be', href: '#what' }, { label: 'The network', href: 'https://openvibe.network/#network', external: false }], history: { type: 'page', title: 'OpenVibe.Actor' } }); } catch (e) {} }
ddiff --git a/dist/openvibe.actor/privacy.html b/dist/openvibe.actor/privacy.html
iindex 286786a..b5cacd9 100644
---- a/dist/openvibe.actor/privacy.html
++++ b/dist/openvibe.actor/privacy.html
@@@ -86,8 +86,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.actor/release.json b/dist/openvibe.actor/release.json
iindex a457b2e..9546d8e 100644
---- a/dist/openvibe.actor/release.json
++++ b/dist/openvibe.actor/release.json
@@@ -1,11 +1,11 @@
{
"service": "actor",
-- "release": "e2be9af766eb",
-- "released_at": "2026-09-28T00:00:00.000Z",
++ "release": "4703583f81b4",
++ "released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.23.0"
++ "openvibe-shared": "1.28.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.actor/sitemap.xml b/dist/openvibe.actor/sitemap.xml
iindex 164335f..282f8e9 100644
---- a/dist/openvibe.actor/sitemap.xml
++++ b/dist/openvibe.actor/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.actor/</loc><lastmod>2026-09-28</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.actor/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.actor/status.json b/dist/openvibe.actor/status.json
iindex 462c491..428115e 100644
---- a/dist/openvibe.actor/status.json
++++ b/dist/openvibe.actor/status.json
@@@ -11,6 +11,6 @@
"launchWaitsFor": "agent principals and delegated grants on OpenVibe.Network and the agent service",
"factsAsOf": "2026-09-28",
"network": "https://openvibe.network",
-- "updated": "2026-09-28",
++ "updated": "2026-09-29",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.actor/terms.html b/dist/openvibe.actor/terms.html
iindex 5777956..6bb5a61 100644
---- a/dist/openvibe.actor/terms.html
++++ b/dist/openvibe.actor/terms.html
@@@ -85,8 +85,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.bot/dmca.html b/dist/openvibe.bot/dmca.html
iindex ab9296e..08c0428 100644
---- a/dist/openvibe.bot/dmca.html
++++ b/dist/openvibe.bot/dmca.html
@@@ -80,8 +80,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.bot/index.html b/dist/openvibe.bot/index.html
iindex f51eddd..17f6b61 100644
---- a/dist/openvibe.bot/index.html
++++ b/dist/openvibe.bot/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Bot — Robots, cameras and devices you can share safely.">
<meta name="twitter:description" content="OpenVibe.Bot will let you register robots, Raspberry Pis, cameras, motors, sensors and other devices, pair them securely, and control them yourself or hand control to friends, stream viewers, apps or your AI agents with timed turns, queues and permissions. Safety runs on the device too: heartbeats, command time limits, speed and range limits and an emergency stop that works without the cloud. OpenVibe.Live already runs stream-controlled robots; Bot makes the device its own thing.">
<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 will let you register robots, Raspberry Pis, cameras, motors, sensors and other devices, pair them securely, and control them yourself or hand control to friends, stream viewers, apps or your AI agents with timed turns, queues and permissions. Safety runs on the device too: heartbeats, command time limits, speed and range limits and an emergency stop that works without the cloud. OpenVibe.Live already runs stream-controlled robots; Bot makes the device its own thing.","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 — Robots, cameras and devices you can share safely.","description":"OpenVibe.Bot will let you register robots, Raspberry Pis, cameras, motors, sensors and other devices, pair them securely, and control them yourself or hand control to friends, stream viewers, apps or your AI agents with timed turns, queues and permissions. Safety runs on the device too: heartbeats, command time limits, speed and range limits and an emergency stop that works without the cloud. OpenVibe.Live already runs stream-controlled robots; Bot makes the device its own thing.","isPartOf":{"@id":"https://openvibe.bot/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-28","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/"}]}}]}</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 will let you register robots, Raspberry Pis, cameras, motors, sensors and other devices, pair them securely, and control them yourself or hand control to friends, stream viewers, apps or your AI agents with timed turns, queues and permissions. Safety runs on the device too: heartbeats, command time limits, speed and range limits and an emergency stop that works without the cloud. OpenVibe.Live already runs stream-controlled robots; Bot makes the device its own thing.","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 — Robots, cameras and devices you can share safely.","description":"OpenVibe.Bot will let you register robots, Raspberry Pis, cameras, motors, sensors and other devices, pair them securely, and control them yourself or hand control to friends, stream viewers, apps or your AI agents with timed turns, queues and permissions. Safety runs on the device too: heartbeats, command time limits, speed and range limits and an emergency stop that works without the cloud. OpenVibe.Live already runs stream-controlled robots; Bot makes the device its own thing.","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/"}]}}]}</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=d9b9af081efe" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -231,8 +231,8 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
@@@ -274,9 +274,9 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</span>
</div>
</div></footer>
--<script src="/shared/ov-mark.js?v=96079ebf2943" async></script>
--<script src="/shared/navbar.js?v=b50d9f47fc34"></script>
--<script src="/shared/footer.js?v=b99e512398d5"></script>
++<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
++<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
if (window.OpenVibeNavbar) { try { OpenVibeNavbar.init({ service: 'bot', apiBase: 'https://openvibe.network', links: [{ label: 'What it will be', href: '#what' }, { label: 'The network', href: 'https://openvibe.network/#network', external: false }], history: { type: 'page', title: 'OpenVibe.Bot' } }); } catch (e) {} }
ddiff --git a/dist/openvibe.bot/privacy.html b/dist/openvibe.bot/privacy.html
iindex 0d7d2b8..06b51c2 100644
---- a/dist/openvibe.bot/privacy.html
++++ b/dist/openvibe.bot/privacy.html
@@@ -86,8 +86,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.bot/release.json b/dist/openvibe.bot/release.json
iindex 989d001..c587b54 100644
---- a/dist/openvibe.bot/release.json
++++ b/dist/openvibe.bot/release.json
@@@ -1,11 +1,11 @@
{
"service": "bot",
-- "release": "0e8b1ae10fe9",
-- "released_at": "2026-09-28T00:00:00.000Z",
++ "release": "0e6fcf2faecf",
++ "released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.23.0"
++ "openvibe-shared": "1.28.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.bot/sitemap.xml b/dist/openvibe.bot/sitemap.xml
iindex f88ce0e..24b44b5 100644
---- a/dist/openvibe.bot/sitemap.xml
++++ b/dist/openvibe.bot/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.bot/</loc><lastmod>2026-09-28</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.bot/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.bot/status.json b/dist/openvibe.bot/status.json
iindex 960933d..f7116de 100644
---- a/dist/openvibe.bot/status.json
++++ b/dist/openvibe.bot/status.json
@@@ -11,6 +11,6 @@
"launchWaitsFor": "device pairing and control leases split out of OpenVibe.Live",
"factsAsOf": "2026-09-28",
"network": "https://openvibe.network",
-- "updated": "2026-09-28",
++ "updated": "2026-09-29",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.bot/terms.html b/dist/openvibe.bot/terms.html
iindex 5690e81..2e462ff 100644
---- a/dist/openvibe.bot/terms.html
++++ b/dist/openvibe.bot/terms.html
@@@ -85,8 +85,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.coupons/dmca.html b/dist/openvibe.coupons/dmca.html
iindex e2e020a..3422e5e 100644
---- a/dist/openvibe.coupons/dmca.html
++++ b/dist/openvibe.coupons/dmca.html
@@@ -80,8 +80,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.coupons/index.html b/dist/openvibe.coupons/index.html
iindex 9ecbd83..5db25e6 100644
---- a/dist/openvibe.coupons/index.html
++++ b/dist/openvibe.coupons/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Coupons — Codes that actually work.">
<meta name="twitter:description" content="OpenVibe.Coupons is community-checked coupon discovery: codes matched to stores, validity reported by real people, expirations tracked, and a browser helper on the way.">
<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.coupons/#site","url":"https://openvibe.coupons/","name":"OpenVibe.Coupons","description":"OpenVibe.Coupons is community-checked coupon discovery: codes matched to stores, validity reported by real people, expirations tracked, and a browser helper on the way.","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.coupons/#page","url":"https://openvibe.coupons/","name":"OpenVibe.Coupons — Codes that actually work.","description":"OpenVibe.Coupons is community-checked coupon discovery: codes matched to stores, validity reported by real people, expirations tracked, and a browser helper on the way.","isPartOf":{"@id":"https://openvibe.coupons/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-28","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Coupons","item":"https://openvibe.coupons/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.coupons/#site","url":"https://openvibe.coupons/","name":"OpenVibe.Coupons","description":"OpenVibe.Coupons is community-checked coupon discovery: codes matched to stores, validity reported by real people, expirations tracked, and a browser helper on the way.","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.coupons/#page","url":"https://openvibe.coupons/","name":"OpenVibe.Coupons — Codes that actually work.","description":"OpenVibe.Coupons is community-checked coupon discovery: codes matched to stores, validity reported by real people, expirations tracked, and a browser helper on the way.","isPartOf":{"@id":"https://openvibe.coupons/#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.Coupons","item":"https://openvibe.coupons/"}]}}]}</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=d9b9af081efe" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -230,8 +230,8 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
@@@ -273,9 +273,9 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</span>
</div>
</div></footer>
--<script src="/shared/ov-mark.js?v=96079ebf2943" async></script>
--<script src="/shared/navbar.js?v=b50d9f47fc34"></script>
--<script src="/shared/footer.js?v=b99e512398d5"></script>
++<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
++<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
if (window.OpenVibeNavbar) { try { OpenVibeNavbar.init({ service: 'coupons', apiBase: 'https://openvibe.network', links: [{ label: 'What it will be', href: '#what' }, { label: 'The network', href: 'https://openvibe.network/#network', external: false }], history: { type: 'page', title: 'OpenVibe.Coupons' } }); } catch (e) {} }
ddiff --git a/dist/openvibe.coupons/privacy.html b/dist/openvibe.coupons/privacy.html
iindex abe5c2c..b1df998 100644
---- a/dist/openvibe.coupons/privacy.html
++++ b/dist/openvibe.coupons/privacy.html
@@@ -86,8 +86,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.coupons/release.json b/dist/openvibe.coupons/release.json
iindex 39de116..bc1dd65 100644
---- a/dist/openvibe.coupons/release.json
++++ b/dist/openvibe.coupons/release.json
@@@ -1,11 +1,11 @@
{
"service": "coupons",
-- "release": "7c696947cb36",
-- "released_at": "2026-09-28T00:00:00.000Z",
++ "release": "d09025b1e4e1",
++ "released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.23.0"
++ "openvibe-shared": "1.28.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.coupons/sitemap.xml b/dist/openvibe.coupons/sitemap.xml
iindex bf64f3d..e90896d 100644
---- a/dist/openvibe.coupons/sitemap.xml
++++ b/dist/openvibe.coupons/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.coupons/</loc><lastmod>2026-09-28</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.coupons/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.coupons/status.json b/dist/openvibe.coupons/status.json
iindex 94f9120..b5caf4b 100644
---- a/dist/openvibe.coupons/status.json
++++ b/dist/openvibe.coupons/status.json
@@@ -18,6 +18,6 @@
"launchWaitsFor": "a person to verify a coupons source's terms and switch it on",
"factsAsOf": "2026-09-28",
"network": "https://openvibe.network",
-- "updated": "2026-09-28",
++ "updated": "2026-09-29",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.coupons/terms.html b/dist/openvibe.coupons/terms.html
iindex 4ccfb27..07d285d 100644
---- a/dist/openvibe.coupons/terms.html
++++ b/dist/openvibe.coupons/terms.html
@@@ -85,8 +85,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.deals/dmca.html b/dist/openvibe.deals/dmca.html
iindex 0fae16b..2f2321a 100644
---- a/dist/openvibe.deals/dmca.html
++++ b/dist/openvibe.deals/dmca.html
@@@ -80,8 +80,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.deals/index.html b/dist/openvibe.deals/index.html
iindex 69fdb8b..8543bc0 100644
---- a/dist/openvibe.deals/index.html
++++ b/dist/openvibe.deals/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Deals — Deals worth seeing.">
<meta name="twitter:description" content="OpenVibe.Deals is community deal discovery for the OpenVibe network: deals people vote on, hotness that reflects real interest, keyword alerts, price comparisons and honest discussion.">
<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.deals/#site","url":"https://openvibe.deals/","name":"OpenVibe.Deals","description":"OpenVibe.Deals is community deal discovery for the OpenVibe network: deals people vote on, hotness that reflects real interest, keyword alerts, price comparisons and honest discussion.","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.deals/#page","url":"https://openvibe.deals/","name":"OpenVibe.Deals — Deals worth seeing.","description":"OpenVibe.Deals is community deal discovery for the OpenVibe network: deals people vote on, hotness that reflects real interest, keyword alerts, price comparisons and honest discussion.","isPartOf":{"@id":"https://openvibe.deals/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-28","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Deals","item":"https://openvibe.deals/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.deals/#site","url":"https://openvibe.deals/","name":"OpenVibe.Deals","description":"OpenVibe.Deals is community deal discovery for the OpenVibe network: deals people vote on, hotness that reflects real interest, keyword alerts, price comparisons and honest discussion.","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.deals/#page","url":"https://openvibe.deals/","name":"OpenVibe.Deals — Deals worth seeing.","description":"OpenVibe.Deals is community deal discovery for the OpenVibe network: deals people vote on, hotness that reflects real interest, keyword alerts, price comparisons and honest discussion.","isPartOf":{"@id":"https://openvibe.deals/#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.Deals","item":"https://openvibe.deals/"}]}}]}</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=d9b9af081efe" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -230,8 +230,8 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
@@@ -273,9 +273,9 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</span>
</div>
</div></footer>
--<script src="/shared/ov-mark.js?v=96079ebf2943" async></script>
--<script src="/shared/navbar.js?v=b50d9f47fc34"></script>
--<script src="/shared/footer.js?v=b99e512398d5"></script>
++<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
++<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
if (window.OpenVibeNavbar) { try { OpenVibeNavbar.init({ service: 'deals', apiBase: 'https://openvibe.network', links: [{ label: 'What it will be', href: '#what' }, { label: 'The network', href: 'https://openvibe.network/#network', external: false }], history: { type: 'page', title: 'OpenVibe.Deals' } }); } catch (e) {} }
ddiff --git a/dist/openvibe.deals/privacy.html b/dist/openvibe.deals/privacy.html
iindex d45193d..f2019fd 100644
---- a/dist/openvibe.deals/privacy.html
++++ b/dist/openvibe.deals/privacy.html
@@@ -86,8 +86,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.deals/release.json b/dist/openvibe.deals/release.json
iindex 62ce61b..2a2de72 100644
---- a/dist/openvibe.deals/release.json
++++ b/dist/openvibe.deals/release.json
@@@ -1,11 +1,11 @@
{
"service": "deals",
-- "release": "a4d1ea44acfb",
-- "released_at": "2026-09-28T00:00:00.000Z",
++ "release": "a8ecb1243272",
++ "released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.23.0"
++ "openvibe-shared": "1.28.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.deals/sitemap.xml b/dist/openvibe.deals/sitemap.xml
iindex 312697a..238ca4e 100644
---- a/dist/openvibe.deals/sitemap.xml
++++ b/dist/openvibe.deals/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.deals/</loc><lastmod>2026-09-28</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.deals/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.deals/status.json b/dist/openvibe.deals/status.json
iindex 8754d23..f14b780 100644
---- a/dist/openvibe.deals/status.json
++++ b/dist/openvibe.deals/status.json
@@@ -18,6 +18,6 @@
"launchWaitsFor": "a person to verify a deals source's terms and switch it on",
"factsAsOf": "2026-09-28",
"network": "https://openvibe.network",
-- "updated": "2026-09-28",
++ "updated": "2026-09-29",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.deals/terms.html b/dist/openvibe.deals/terms.html
iindex c9a3362..5c629af 100644
---- a/dist/openvibe.deals/terms.html
++++ b/dist/openvibe.deals/terms.html
@@@ -85,8 +85,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.download/dmca.html b/dist/openvibe.download/dmca.html
iindex 7e53f37..6fc7031 100644
---- a/dist/openvibe.download/dmca.html
++++ b/dist/openvibe.download/dmca.html
@@@ -80,8 +80,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.download/index.html b/dist/openvibe.download/index.html
iindex 3907240..607cd65 100644
---- a/dist/openvibe.download/index.html
++++ b/dist/openvibe.download/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Download — Upload anything. Share it anywhere.">
<meta name="twitter:description" content="OpenVibe.Download will be the file home of the OpenVibe network: large uploads and simple share links with or without an account, folders, sync and backups when you sign in, and AI that previews, sorts and finds your files, in the spirit of MediaFire and MEGA, built on OpenVibe.Media and open through the API.">
<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.download/#site","url":"https://openvibe.download/","name":"OpenVibe.Download","description":"OpenVibe.Download will be the file home of the OpenVibe network: large uploads and simple share links with or without an account, folders, sync and backups when you sign in, and AI that previews, sorts and finds your files, in the spirit of MediaFire and MEGA, built on OpenVibe.Media and open through the API.","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.download/#page","url":"https://openvibe.download/","name":"OpenVibe.Download — Upload anything. Share it anywhere.","description":"OpenVibe.Download will be the file home of the OpenVibe network: large uploads and simple share links with or without an account, folders, sync and backups when you sign in, and AI that previews, sorts and finds your files, in the spirit of MediaFire and MEGA, built on OpenVibe.Media and open through the API.","isPartOf":{"@id":"https://openvibe.download/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-28","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Download","item":"https://openvibe.download/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.download/#site","url":"https://openvibe.download/","name":"OpenVibe.Download","description":"OpenVibe.Download will be the file home of the OpenVibe network: large uploads and simple share links with or without an account, folders, sync and backups when you sign in, and AI that previews, sorts and finds your files, in the spirit of MediaFire and MEGA, built on OpenVibe.Media and open through the API.","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.download/#page","url":"https://openvibe.download/","name":"OpenVibe.Download — Upload anything. Share it anywhere.","description":"OpenVibe.Download will be the file home of the OpenVibe network: large uploads and simple share links with or without an account, folders, sync and backups when you sign in, and AI that previews, sorts and finds your files, in the spirit of MediaFire and MEGA, built on OpenVibe.Media and open through the API.","isPartOf":{"@id":"https://openvibe.download/#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.Download","item":"https://openvibe.download/"}]}}]}</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=d9b9af081efe" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -231,8 +231,8 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
@@@ -274,9 +274,9 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</span>
</div>
</div></footer>
--<script src="/shared/ov-mark.js?v=96079ebf2943" async></script>
--<script src="/shared/navbar.js?v=b50d9f47fc34"></script>
--<script src="/shared/footer.js?v=b99e512398d5"></script>
++<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
++<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
if (window.OpenVibeNavbar) { try { OpenVibeNavbar.init({ service: 'download', apiBase: 'https://openvibe.network', links: [{ label: 'What it will be', href: '#what' }, { label: 'The network', href: 'https://openvibe.network/#network', external: false }], history: { type: 'page', title: 'OpenVibe.Download' } }); } catch (e) {} }
ddiff --git a/dist/openvibe.download/privacy.html b/dist/openvibe.download/privacy.html
iindex c2fac33..c156a38 100644
---- a/dist/openvibe.download/privacy.html
++++ b/dist/openvibe.download/privacy.html
@@@ -86,8 +86,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.download/release.json b/dist/openvibe.download/release.json
iindex 8b8fc02..3244035 100644
---- a/dist/openvibe.download/release.json
++++ b/dist/openvibe.download/release.json
@@@ -1,11 +1,11 @@
{
"service": "download",
-- "release": "77fefbb366b0",
-- "released_at": "2026-09-28T00:00:00.000Z",
++ "release": "a2841d75b879",
++ "released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.23.0"
++ "openvibe-shared": "1.28.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.download/sitemap.xml b/dist/openvibe.download/sitemap.xml
iindex 11eada9..81c33d2 100644
---- a/dist/openvibe.download/sitemap.xml
++++ b/dist/openvibe.download/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.download/</loc><lastmod>2026-09-28</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.download/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.download/status.json b/dist/openvibe.download/status.json
iindex 6353ccf..a2d36a5 100644
---- a/dist/openvibe.download/status.json
++++ b/dist/openvibe.download/status.json
@@@ -11,6 +11,6 @@
"launchWaitsFor": "the shared file service on OpenVibe.Media",
"factsAsOf": "2026-09-28",
"network": "https://openvibe.network",
-- "updated": "2026-09-28",
++ "updated": "2026-09-29",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.download/terms.html b/dist/openvibe.download/terms.html
iindex 3bef9a0..3dfbacd 100644
---- a/dist/openvibe.download/terms.html
++++ b/dist/openvibe.download/terms.html
@@@ -85,8 +85,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.events/dmca.html b/dist/openvibe.events/dmca.html
iindex 5ec98f0..0546de9 100644
---- a/dist/openvibe.events/dmca.html
++++ b/dist/openvibe.events/dmca.html
@@@ -80,8 +80,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.events/index.html b/dist/openvibe.events/index.html
iindex 02d74d2..3760806 100644
---- a/dist/openvibe.events/index.html
++++ b/dist/openvibe.events/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Events — Events, queues and webhooks you can build on.">
<meta name="twitter:description" content="OpenVibe.Events is the network&#39;s event system: durable events, topics and subscriptions, signed webhooks with retries, dead-letter queues and replay, pull consumers with checkpoints, and realtime delivery to browsers with cursor resume. Every OpenVibe product already publishes through it. This domain becomes its home, with queues, streams, project namespaces and developer tools.">
<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.events/#site","url":"https://openvibe.events/","name":"OpenVibe.Events","description":"OpenVibe.Events is the network's event system: durable events, topics and subscriptions, signed webhooks with retries, dead-letter queues and replay, pull consumers with checkpoints, and realtime delivery to browsers with cursor resume. Every OpenVibe product already publishes through it. This domain becomes its home, with queues, streams, project namespaces and developer tools.","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.events/#page","url":"https://openvibe.events/","name":"OpenVibe.Events — Events, queues and webhooks you can build on.","description":"OpenVibe.Events is the network's event system: durable events, topics and subscriptions, signed webhooks with retries, dead-letter queues and replay, pull consumers with checkpoints, and realtime delivery to browsers with cursor resume. Every OpenVibe product already publishes through it. This domain becomes its home, with queues, streams, project namespaces and developer tools.","isPartOf":{"@id":"https://openvibe.events/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-28","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Events","item":"https://openvibe.events/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.events/#site","url":"https://openvibe.events/","name":"OpenVibe.Events","description":"OpenVibe.Events is the network's event system: durable events, topics and subscriptions, signed webhooks with retries, dead-letter queues and replay, pull consumers with checkpoints, and realtime delivery to browsers with cursor resume. Every OpenVibe product already publishes through it. This domain becomes its home, with queues, streams, project namespaces and developer tools.","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.events/#page","url":"https://openvibe.events/","name":"OpenVibe.Events — Events, queues and webhooks you can build on.","description":"OpenVibe.Events is the network's event system: durable events, topics and subscriptions, signed webhooks with retries, dead-letter queues and replay, pull consumers with checkpoints, and realtime delivery to browsers with cursor resume. Every OpenVibe product already publishes through it. This domain becomes its home, with queues, streams, project namespaces and developer tools.","isPartOf":{"@id":"https://openvibe.events/#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.Events","item":"https://openvibe.events/"}]}}]}</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=d9b9af081efe" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -230,8 +230,8 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
@@@ -273,9 +273,9 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</span>
</div>
</div></footer>
--<script src="/shared/ov-mark.js?v=96079ebf2943" async></script>
--<script src="/shared/navbar.js?v=b50d9f47fc34"></script>
--<script src="/shared/footer.js?v=b99e512398d5"></script>
++<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
++<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
if (window.OpenVibeNavbar) { try { OpenVibeNavbar.init({ service: 'events', apiBase: 'https://openvibe.network', links: [{ label: 'What it will be', href: '#what' }, { label: 'The network', href: 'https://openvibe.network/#network', external: false }], history: { type: 'page', title: 'OpenVibe.Events' } }); } catch (e) {} }
ddiff --git a/dist/openvibe.events/privacy.html b/dist/openvibe.events/privacy.html
iindex b3e6119..b17d03e 100644
---- a/dist/openvibe.events/privacy.html
++++ b/dist/openvibe.events/privacy.html
@@@ -86,8 +86,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.events/release.json b/dist/openvibe.events/release.json
iindex 0ebc27f..d568ff5 100644
---- a/dist/openvibe.events/release.json
++++ b/dist/openvibe.events/release.json
@@@ -1,11 +1,11 @@
{
"service": "events",
-- "release": "ea81ae13049d",
-- "released_at": "2026-09-28T00:00:00.000Z",
++ "release": "7fa50fa54047",
++ "released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.23.0"
++ "openvibe-shared": "1.28.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.events/sitemap.xml b/dist/openvibe.events/sitemap.xml
iindex c6798fd..265ddd0 100644
---- a/dist/openvibe.events/sitemap.xml
++++ b/dist/openvibe.events/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.events/</loc><lastmod>2026-09-28</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.events/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.events/status.json b/dist/openvibe.events/status.json
iindex 311d3ea..5800884 100644
---- a/dist/openvibe.events/status.json
++++ b/dist/openvibe.events/status.json
@@@ -18,6 +18,6 @@
"launchWaitsFor": "the developer site and queue and stream primitives; the API runs at events.openvibe.network",
"factsAsOf": "2026-09-28",
"network": "https://openvibe.network",
-- "updated": "2026-09-28",
++ "updated": "2026-09-29",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.events/terms.html b/dist/openvibe.events/terms.html
iindex 87ddeaa..be06193 100644
---- a/dist/openvibe.events/terms.html
++++ b/dist/openvibe.events/terms.html
@@@ -85,8 +85,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.food/dmca.html b/dist/openvibe.food/dmca.html
iindex 56ac548..12f5c3f 100644
---- a/dist/openvibe.food/dmca.html
++++ b/dist/openvibe.food/dmca.html
@@@ -80,8 +80,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.food/index.html b/dist/openvibe.food/index.html
iindex 74b5f4d..0575ee9 100644
---- a/dist/openvibe.food/index.html
++++ b/dist/openvibe.food/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Food — What should we eat?">
<meta name="twitter:description" content="OpenVibe.Food will bring food together: compare delivery prices across apps, find coupons and budget meal kits, plan meals alone, as a couple or as a group, and turn what is in your cupboard into recipes with the network&#39;s AI. The food tools on OpenVibe.Tools will live here too.">
<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.food/#site","url":"https://openvibe.food/","name":"OpenVibe.Food","description":"OpenVibe.Food will bring food together: compare delivery prices across apps, find coupons and budget meal kits, plan meals alone, as a couple or as a group, and turn what is in your cupboard into recipes with the network's AI. The food tools on OpenVibe.Tools will live here too.","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.food/#page","url":"https://openvibe.food/","name":"OpenVibe.Food — What should we eat?","description":"OpenVibe.Food will bring food together: compare delivery prices across apps, find coupons and budget meal kits, plan meals alone, as a couple or as a group, and turn what is in your cupboard into recipes with the network's AI. The food tools on OpenVibe.Tools will live here too.","isPartOf":{"@id":"https://openvibe.food/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-28","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Food","item":"https://openvibe.food/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.food/#site","url":"https://openvibe.food/","name":"OpenVibe.Food","description":"OpenVibe.Food will bring food together: compare delivery prices across apps, find coupons and budget meal kits, plan meals alone, as a couple or as a group, and turn what is in your cupboard into recipes with the network's AI. The food tools on OpenVibe.Tools will live here too.","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.food/#page","url":"https://openvibe.food/","name":"OpenVibe.Food — What should we eat?","description":"OpenVibe.Food will bring food together: compare delivery prices across apps, find coupons and budget meal kits, plan meals alone, as a couple or as a group, and turn what is in your cupboard into recipes with the network's AI. The food tools on OpenVibe.Tools will live here too.","isPartOf":{"@id":"https://openvibe.food/#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.Food","item":"https://openvibe.food/"}]}}]}</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=d9b9af081efe" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -231,8 +231,8 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
@@@ -274,9 +274,9 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</span>
</div>
</div></footer>
--<script src="/shared/ov-mark.js?v=96079ebf2943" async></script>
--<script src="/shared/navbar.js?v=b50d9f47fc34"></script>
--<script src="/shared/footer.js?v=b99e512398d5"></script>
++<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
++<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
if (window.OpenVibeNavbar) { try { OpenVibeNavbar.init({ service: 'food', apiBase: 'https://openvibe.network', links: [{ label: 'What it will be', href: '#what' }, { label: 'The network', href: 'https://openvibe.network/#network', external: false }], history: { type: 'page', title: 'OpenVibe.Food' } }); } catch (e) {} }
ddiff --git a/dist/openvibe.food/privacy.html b/dist/openvibe.food/privacy.html
iindex f3decca..b33fbb4 100644
---- a/dist/openvibe.food/privacy.html
++++ b/dist/openvibe.food/privacy.html
@@@ -86,8 +86,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.food/release.json b/dist/openvibe.food/release.json
iindex 7d2cdbe..1084ecf 100644
---- a/dist/openvibe.food/release.json
++++ b/dist/openvibe.food/release.json
@@@ -1,11 +1,11 @@
{
"service": "food",
-- "release": "281b11e409a3",
-- "released_at": "2026-09-28T00:00:00.000Z",
++ "release": "da1f0167ad10",
++ "released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.23.0"
++ "openvibe-shared": "1.28.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.food/sitemap.xml b/dist/openvibe.food/sitemap.xml
iindex d651d37..37b20ee 100644
---- a/dist/openvibe.food/sitemap.xml
++++ b/dist/openvibe.food/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.food/</loc><lastmod>2026-09-28</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.food/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.food/status.json b/dist/openvibe.food/status.json
iindex 4b289bb..d0c0102 100644
---- a/dist/openvibe.food/status.json
++++ b/dist/openvibe.food/status.json
@@@ -11,6 +11,6 @@
"launchWaitsFor": "the food tools moving over from OpenVibe.Tools",
"factsAsOf": "2026-09-28",
"network": "https://openvibe.network",
-- "updated": "2026-09-28",
++ "updated": "2026-09-29",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.food/terms.html b/dist/openvibe.food/terms.html
iindex 135493a..44c7a9e 100644
---- a/dist/openvibe.food/terms.html
++++ b/dist/openvibe.food/terms.html
@@@ -85,8 +85,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.games/dmca.html b/dist/openvibe.games/dmca.html
iindex 259ccc4..d5e645e 100644
---- a/dist/openvibe.games/dmca.html
++++ b/dist/openvibe.games/dmca.html
@@@ -81,8 +81,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.games/privacy.html b/dist/openvibe.games/privacy.html
iindex c73d378..a5be855 100644
---- a/dist/openvibe.games/privacy.html
++++ b/dist/openvibe.games/privacy.html
@@@ -86,8 +86,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.games/terms.html b/dist/openvibe.games/terms.html
iindex 82ab3a7..781811b 100644
---- a/dist/openvibe.games/terms.html
++++ b/dist/openvibe.games/terms.html
@@@ -87,8 +87,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.help/dmca.html b/dist/openvibe.help/dmca.html
iindex fb38fff..0ad12f8 100644
---- a/dist/openvibe.help/dmca.html
++++ b/dist/openvibe.help/dmca.html
@@@ -80,8 +80,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.help/index.html b/dist/openvibe.help/index.html
iindex 61681a4..3ab6507 100644
---- a/dist/openvibe.help/index.html
++++ b/dist/openvibe.help/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Help — Answers, support and a way to reach people.">
<meta name="twitter:description" content="OpenVibe.Help will be the help and support center for every OpenVibe site: search answers drawn from the docs, wiki, blog and service status, follow troubleshooting guides, and open a ticket that stays one conversation on the web and by email. A Report Problem button on every site will attach the safe details staff need (release, request and trace ids) and never secrets.">
<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.help/#site","url":"https://openvibe.help/","name":"OpenVibe.Help","description":"OpenVibe.Help will be the help and support center for every OpenVibe site: search answers drawn from the docs, wiki, blog and service status, follow troubleshooting guides, and open a ticket that stays one conversation on the web and by email. A Report Problem button on every site will attach the safe details staff need (release, request and trace ids) and never secrets.","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.help/#page","url":"https://openvibe.help/","name":"OpenVibe.Help — Answers, support and a way to reach people.","description":"OpenVibe.Help will be the help and support center for every OpenVibe site: search answers drawn from the docs, wiki, blog and service status, follow troubleshooting guides, and open a ticket that stays one conversation on the web and by email. A Report Problem button on every site will attach the safe details staff need (release, request and trace ids) and never secrets.","isPartOf":{"@id":"https://openvibe.help/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-28","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Help","item":"https://openvibe.help/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.help/#site","url":"https://openvibe.help/","name":"OpenVibe.Help","description":"OpenVibe.Help will be the help and support center for every OpenVibe site: search answers drawn from the docs, wiki, blog and service status, follow troubleshooting guides, and open a ticket that stays one conversation on the web and by email. A Report Problem button on every site will attach the safe details staff need (release, request and trace ids) and never secrets.","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.help/#page","url":"https://openvibe.help/","name":"OpenVibe.Help — Answers, support and a way to reach people.","description":"OpenVibe.Help will be the help and support center for every OpenVibe site: search answers drawn from the docs, wiki, blog and service status, follow troubleshooting guides, and open a ticket that stays one conversation on the web and by email. A Report Problem button on every site will attach the safe details staff need (release, request and trace ids) and never secrets.","isPartOf":{"@id":"https://openvibe.help/#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.Help","item":"https://openvibe.help/"}]}}]}</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=d9b9af081efe" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -231,8 +231,8 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
@@@ -274,9 +274,9 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</span>
</div>
</div></footer>
--<script src="/shared/ov-mark.js?v=96079ebf2943" async></script>
--<script src="/shared/navbar.js?v=b50d9f47fc34"></script>
--<script src="/shared/footer.js?v=b99e512398d5"></script>
++<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
++<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
if (window.OpenVibeNavbar) { try { OpenVibeNavbar.init({ service: 'help', apiBase: 'https://openvibe.network', links: [{ label: 'What it will be', href: '#what' }, { label: 'The network', href: 'https://openvibe.network/#network', external: false }], history: { type: 'page', title: 'OpenVibe.Help' } }); } catch (e) {} }
ddiff --git a/dist/openvibe.help/privacy.html b/dist/openvibe.help/privacy.html
iindex bdc60d1..df04288 100644
---- a/dist/openvibe.help/privacy.html
++++ b/dist/openvibe.help/privacy.html
@@@ -86,8 +86,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.help/release.json b/dist/openvibe.help/release.json
iindex ebe3148..2a450fb 100644
---- a/dist/openvibe.help/release.json
++++ b/dist/openvibe.help/release.json
@@@ -1,11 +1,11 @@
{
"service": "help",
-- "release": "3749928d59bf",
-- "released_at": "2026-09-28T00:00:00.000Z",
++ "release": "1b2e1d17b075",
++ "released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.23.0"
++ "openvibe-shared": "1.28.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.help/sitemap.xml b/dist/openvibe.help/sitemap.xml
iindex 4621b50..bc8e233 100644
---- a/dist/openvibe.help/sitemap.xml
++++ b/dist/openvibe.help/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.help/</loc><lastmod>2026-09-28</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.help/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.help/status.json b/dist/openvibe.help/status.json
iindex 48f8fe4..4729b0c 100644
---- a/dist/openvibe.help/status.json
++++ b/dist/openvibe.help/status.json
@@@ -11,6 +11,6 @@
"launchWaitsFor": "the ticket service and the Frame's Help button",
"factsAsOf": "2026-09-28",
"network": "https://openvibe.network",
-- "updated": "2026-09-28",
++ "updated": "2026-09-29",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.help/terms.html b/dist/openvibe.help/terms.html
iindex a5310f5..05b384d 100644
---- a/dist/openvibe.help/terms.html
++++ b/dist/openvibe.help/terms.html
@@@ -85,8 +85,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.homes/dmca.html b/dist/openvibe.homes/dmca.html
iindex cc461f9..7897a85 100644
---- a/dist/openvibe.homes/dmca.html
++++ b/dist/openvibe.homes/dmca.html
@@@ -80,8 +80,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.homes/index.html b/dist/openvibe.homes/index.html
iindex 830875b..3fe128f 100644
---- a/dist/openvibe.homes/index.html
++++ b/dist/openvibe.homes/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Homes — Homes to own, clearly explained.">
<meta name="twitter:description" content="OpenVibe.Homes will be the owning side of OpenVibe.Rent: homes for sale, property records and neighbourhood context in one place, with alerts and AI summaries that always link their sources.">
<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.homes/#site","url":"https://openvibe.homes/","name":"OpenVibe.Homes","description":"OpenVibe.Homes will be the owning side of OpenVibe.Rent: homes for sale, property records and neighbourhood context in one place, with alerts and AI summaries that always link their sources.","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.homes/#page","url":"https://openvibe.homes/","name":"OpenVibe.Homes — Homes to own, clearly explained.","description":"OpenVibe.Homes will be the owning side of OpenVibe.Rent: homes for sale, property records and neighbourhood context in one place, with alerts and AI summaries that always link their sources.","isPartOf":{"@id":"https://openvibe.homes/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-28","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Homes","item":"https://openvibe.homes/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.homes/#site","url":"https://openvibe.homes/","name":"OpenVibe.Homes","description":"OpenVibe.Homes will be the owning side of OpenVibe.Rent: homes for sale, property records and neighbourhood context in one place, with alerts and AI summaries that always link their sources.","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.homes/#page","url":"https://openvibe.homes/","name":"OpenVibe.Homes — Homes to own, clearly explained.","description":"OpenVibe.Homes will be the owning side of OpenVibe.Rent: homes for sale, property records and neighbourhood context in one place, with alerts and AI summaries that always link their sources.","isPartOf":{"@id":"https://openvibe.homes/#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.Homes","item":"https://openvibe.homes/"}]}}]}</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=d9b9af081efe" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -230,8 +230,8 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
@@@ -273,9 +273,9 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</span>
</div>
</div></footer>
--<script src="/shared/ov-mark.js?v=96079ebf2943" async></script>
--<script src="/shared/navbar.js?v=b50d9f47fc34"></script>
--<script src="/shared/footer.js?v=b99e512398d5"></script>
++<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
++<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
if (window.OpenVibeNavbar) { try { OpenVibeNavbar.init({ service: 'homes', apiBase: 'https://openvibe.network', links: [{ label: 'What it will be', href: '#what' }, { label: 'The network', href: 'https://openvibe.network/#network', external: false }], history: { type: 'page', title: 'OpenVibe.Homes' } }); } catch (e) {} }
ddiff --git a/dist/openvibe.homes/privacy.html b/dist/openvibe.homes/privacy.html
iindex a6be56f..d4ebbae 100644
---- a/dist/openvibe.homes/privacy.html
++++ b/dist/openvibe.homes/privacy.html
@@@ -86,8 +86,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.homes/release.json b/dist/openvibe.homes/release.json
iindex 045ec87..d0e4c7d 100644
---- a/dist/openvibe.homes/release.json
++++ b/dist/openvibe.homes/release.json
@@@ -1,11 +1,11 @@
{
"service": "homes",
-- "release": "5d889ae8b9bd",
-- "released_at": "2026-09-28T00:00:00.000Z",
++ "release": "6d6153c59675",
++ "released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.23.0"
++ "openvibe-shared": "1.28.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.homes/sitemap.xml b/dist/openvibe.homes/sitemap.xml
iindex 5cb10ea..4d2dc80 100644
---- a/dist/openvibe.homes/sitemap.xml
++++ b/dist/openvibe.homes/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.homes/</loc><lastmod>2026-09-28</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.homes/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.homes/status.json b/dist/openvibe.homes/status.json
iindex bae4df8..a3591c6 100644
---- a/dist/openvibe.homes/status.json
++++ b/dist/openvibe.homes/status.json
@@@ -11,6 +11,6 @@
"launchWaitsFor": "verified listing and records sources",
"factsAsOf": "2026-09-28",
"network": "https://openvibe.network",
-- "updated": "2026-09-28",
++ "updated": "2026-09-29",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.homes/terms.html b/dist/openvibe.homes/terms.html
iindex 6fc7e23..cc2cc2d 100644
---- a/dist/openvibe.homes/terms.html
++++ b/dist/openvibe.homes/terms.html
@@@ -85,8 +85,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.host/dmca.html b/dist/openvibe.host/dmca.html
iindex 465ee74..f97b6a6 100644
---- a/dist/openvibe.host/dmca.html
++++ b/dist/openvibe.host/dmca.html
@@@ -81,8 +81,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.host/index.html b/dist/openvibe.host/index.html
iindex a4f9075..5d8fce9 100644
---- a/dist/openvibe.host/index.html
++++ b/dist/openvibe.host/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Host — Static sites for OpenVibe projects.">
<meta name="twitter:description" content="OpenVibe.Host is the network&#39;s deployment tooling and, next, static site hosting for OpenVibe projects. The tooling (ovhost) already runs on the network&#39;s host: deploys with automatic rollback, backups and restore drills for the network&#39;s own services. The hosting part will let a project upload a folder of HTML, CSS, JavaScript and images, serve it at &lt;site&gt;.openvibe.host and roll back to any earlier deploy in one step. Static files only: nothing uploaded is run as code.">
<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.host/#site","url":"https://openvibe.host/","name":"OpenVibe.Host","description":"OpenVibe.Host is the network's deployment tooling and, next, static site hosting for OpenVibe projects. The tooling (ovhost) already runs on the network's host: deploys with automatic rollback, backups and restore drills for the network's own services. The hosting part will let a project upload a folder of HTML, CSS, JavaScript and images, serve it at <site>.openvibe.host and roll back to any earlier deploy in one step. Static files only: nothing uploaded is run as code.","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.host/#page","url":"https://openvibe.host/","name":"OpenVibe.Host — Static sites for OpenVibe projects.","description":"OpenVibe.Host is the network's deployment tooling and, next, static site hosting for OpenVibe projects. The tooling (ovhost) already runs on the network's host: deploys with automatic rollback, backups and restore drills for the network's own services. The hosting part will let a project upload a folder of HTML, CSS, JavaScript and images, serve it at <site>.openvibe.host and roll back to any earlier deploy in one step. Static files only: nothing uploaded is run as code.","isPartOf":{"@id":"https://openvibe.host/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-28","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Host","item":"https://openvibe.host/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.host/#site","url":"https://openvibe.host/","name":"OpenVibe.Host","description":"OpenVibe.Host is the network's deployment tooling and, next, static site hosting for OpenVibe projects. The tooling (ovhost) already runs on the network's host: deploys with automatic rollback, backups and restore drills for the network's own services. The hosting part will let a project upload a folder of HTML, CSS, JavaScript and images, serve it at <site>.openvibe.host and roll back to any earlier deploy in one step. Static files only: nothing uploaded is run as code.","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.host/#page","url":"https://openvibe.host/","name":"OpenVibe.Host — Static sites for OpenVibe projects.","description":"OpenVibe.Host is the network's deployment tooling and, next, static site hosting for OpenVibe projects. The tooling (ovhost) already runs on the network's host: deploys with automatic rollback, backups and restore drills for the network's own services. The hosting part will let a project upload a folder of HTML, CSS, JavaScript and images, serve it at <site>.openvibe.host and roll back to any earlier deploy in one step. Static files only: nothing uploaded is run as code.","isPartOf":{"@id":"https://openvibe.host/#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.Host","item":"https://openvibe.host/"}]}}]}</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=d9b9af081efe" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -231,8 +231,8 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
@@@ -274,9 +274,9 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</span>
</div>
</div></footer>
--<script src="/shared/ov-mark.js?v=96079ebf2943" async></script>
--<script src="/shared/navbar.js?v=b50d9f47fc34"></script>
--<script src="/shared/footer.js?v=b99e512398d5"></script>
++<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
++<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
if (window.OpenVibeNavbar) { try { OpenVibeNavbar.init({ service: 'host', apiBase: 'https://openvibe.network', links: [{ label: 'What it will be', href: '#what' }, { label: 'The network', href: 'https://openvibe.network/#network', external: false }], history: { type: 'page', title: 'OpenVibe.Host' } }); } catch (e) {} }
ddiff --git a/dist/openvibe.host/privacy.html b/dist/openvibe.host/privacy.html
iindex d25f183..311f021 100644
---- a/dist/openvibe.host/privacy.html
++++ b/dist/openvibe.host/privacy.html
@@@ -86,8 +86,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.host/release.json b/dist/openvibe.host/release.json
iindex 06537e9..83a9131 100644
---- a/dist/openvibe.host/release.json
++++ b/dist/openvibe.host/release.json
@@@ -1,11 +1,11 @@
{
"service": "host",
-- "release": "fd4bdb279fe3",
-- "released_at": "2026-09-28T00:00:00.000Z",
++ "release": "de904cc1995a",
++ "released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.23.0"
++ "openvibe-shared": "1.28.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.host/sitemap.xml b/dist/openvibe.host/sitemap.xml
iindex 493247d..0311c0c 100644
---- a/dist/openvibe.host/sitemap.xml
++++ b/dist/openvibe.host/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.host/</loc><lastmod>2026-09-28</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.host/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.host/status.json b/dist/openvibe.host/status.json
iindex d58c7e1..16f187d 100644
---- a/dist/openvibe.host/status.json
++++ b/dist/openvibe.host/status.json
@@@ -18,6 +18,6 @@
"launchWaitsFor": "the owner's go on its launch checklist",
"factsAsOf": "2026-09-28",
"network": "https://openvibe.network",
-- "updated": "2026-09-28",
++ "updated": "2026-09-29",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.host/terms.html b/dist/openvibe.host/terms.html
iindex 56f50be..520f124 100644
---- a/dist/openvibe.host/terms.html
++++ b/dist/openvibe.host/terms.html
@@@ -87,8 +87,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.news/dmca.html b/dist/openvibe.news/dmca.html
iindex 8d34dca..b3a1ff2 100644
---- a/dist/openvibe.news/dmca.html
++++ b/dist/openvibe.news/dmca.html
@@@ -80,8 +80,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.news/index.html b/dist/openvibe.news/index.html
iindex 9e20377..39a86d3 100644
---- a/dist/openvibe.news/index.html
++++ b/dist/openvibe.news/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.News — Sourced. Summarised. Many angles.">
<meta name="twitter:description" content="OpenVibe.News aggregates the news with transparency: sourced stories, summaries that show their sources, multiple angles side by side, topic pages and framing you control — not an algorithm you can&#39;t see.">
<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.news/#site","url":"https://openvibe.news/","name":"OpenVibe.News","description":"OpenVibe.News aggregates the news with transparency: sourced stories, summaries that show their sources, multiple angles side by side, topic pages and framing you control — not an algorithm you can't see.","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.news/#page","url":"https://openvibe.news/","name":"OpenVibe.News — Sourced. Summarised. Many angles.","description":"OpenVibe.News aggregates the news with transparency: sourced stories, summaries that show their sources, multiple angles side by side, topic pages and framing you control — not an algorithm you can't see.","isPartOf":{"@id":"https://openvibe.news/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-28","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.News","item":"https://openvibe.news/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.news/#site","url":"https://openvibe.news/","name":"OpenVibe.News","description":"OpenVibe.News aggregates the news with transparency: sourced stories, summaries that show their sources, multiple angles side by side, topic pages and framing you control — not an algorithm you can't see.","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.news/#page","url":"https://openvibe.news/","name":"OpenVibe.News — Sourced. Summarised. Many angles.","description":"OpenVibe.News aggregates the news with transparency: sourced stories, summaries that show their sources, multiple angles side by side, topic pages and framing you control — not an algorithm you can't see.","isPartOf":{"@id":"https://openvibe.news/#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.News","item":"https://openvibe.news/"}]}}]}</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=d9b9af081efe" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -230,8 +230,8 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
@@@ -273,9 +273,9 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</span>
</div>
</div></footer>
--<script src="/shared/ov-mark.js?v=96079ebf2943" async></script>
--<script src="/shared/navbar.js?v=b50d9f47fc34"></script>
--<script src="/shared/footer.js?v=b99e512398d5"></script>
++<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
++<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
if (window.OpenVibeNavbar) { try { OpenVibeNavbar.init({ service: 'news', apiBase: 'https://openvibe.network', links: [{ label: 'What it will be', href: '#what' }, { label: 'The network', href: 'https://openvibe.network/#network', external: false }], history: { type: 'page', title: 'OpenVibe.News' } }); } catch (e) {} }
ddiff --git a/dist/openvibe.news/privacy.html b/dist/openvibe.news/privacy.html
iindex aa419a6..4c6dece 100644
---- a/dist/openvibe.news/privacy.html
++++ b/dist/openvibe.news/privacy.html
@@@ -86,8 +86,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.news/release.json b/dist/openvibe.news/release.json
iindex a5ec4b3..6153e87 100644
---- a/dist/openvibe.news/release.json
++++ b/dist/openvibe.news/release.json
@@@ -1,11 +1,11 @@
{
"service": "news",
-- "release": "c67b185845c2",
-- "released_at": "2026-09-28T00:00:00.000Z",
++ "release": "5fabafe0e173",
++ "released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.23.0"
++ "openvibe-shared": "1.28.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.news/sitemap.xml b/dist/openvibe.news/sitemap.xml
iindex 46cb5e2..c747ce6 100644
---- a/dist/openvibe.news/sitemap.xml
++++ b/dist/openvibe.news/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.news/</loc><lastmod>2026-09-28</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.news/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.news/status.json b/dist/openvibe.news/status.json
iindex c5086fd..a7c11e2 100644
---- a/dist/openvibe.news/status.json
++++ b/dist/openvibe.news/status.json
@@@ -18,6 +18,6 @@
"launchWaitsFor": "a person to verify a news source's terms and an editor to publish the first reviewed story",
"factsAsOf": "2026-09-28",
"network": "https://openvibe.network",
-- "updated": "2026-09-28",
++ "updated": "2026-09-29",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.news/terms.html b/dist/openvibe.news/terms.html
iindex eabf9b3..0341a87 100644
---- a/dist/openvibe.news/terms.html
++++ b/dist/openvibe.news/terms.html
@@@ -85,8 +85,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.pics/dmca.html b/dist/openvibe.pics/dmca.html
iindex 5d43b1e..58a9f0b 100644
---- a/dist/openvibe.pics/dmca.html
++++ b/dist/openvibe.pics/dmca.html
@@@ -80,8 +80,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.pics/index.html b/dist/openvibe.pics/index.html
iindex b1b861d..8f55a76 100644
---- a/dist/openvibe.pics/index.html
++++ b/dist/openvibe.pics/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Pics — Share pictures. Fast, open, yours.">
<meta name="twitter:description" content="OpenVibe.Pics will be the picture home of the OpenVibe network: quick uploads and share links with or without an account, albums and galleries, image processing and optimisation served from a shared CDN, and AI image tools, an open and modular alternative to Imgur that is also usable through the OpenVibe API.">
<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.pics/#site","url":"https://openvibe.pics/","name":"OpenVibe.Pics","description":"OpenVibe.Pics will be the picture home of the OpenVibe network: quick uploads and share links with or without an account, albums and galleries, image processing and optimisation served from a shared CDN, and AI image tools, an open and modular alternative to Imgur that is also usable through the OpenVibe API.","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.pics/#page","url":"https://openvibe.pics/","name":"OpenVibe.Pics — Share pictures. Fast, open, yours.","description":"OpenVibe.Pics will be the picture home of the OpenVibe network: quick uploads and share links with or without an account, albums and galleries, image processing and optimisation served from a shared CDN, and AI image tools, an open and modular alternative to Imgur that is also usable through the OpenVibe API.","isPartOf":{"@id":"https://openvibe.pics/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-28","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Pics","item":"https://openvibe.pics/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.pics/#site","url":"https://openvibe.pics/","name":"OpenVibe.Pics","description":"OpenVibe.Pics will be the picture home of the OpenVibe network: quick uploads and share links with or without an account, albums and galleries, image processing and optimisation served from a shared CDN, and AI image tools, an open and modular alternative to Imgur that is also usable through the OpenVibe API.","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.pics/#page","url":"https://openvibe.pics/","name":"OpenVibe.Pics — Share pictures. Fast, open, yours.","description":"OpenVibe.Pics will be the picture home of the OpenVibe network: quick uploads and share links with or without an account, albums and galleries, image processing and optimisation served from a shared CDN, and AI image tools, an open and modular alternative to Imgur that is also usable through the OpenVibe API.","isPartOf":{"@id":"https://openvibe.pics/#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.Pics","item":"https://openvibe.pics/"}]}}]}</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=d9b9af081efe" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -231,8 +231,8 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
@@@ -274,9 +274,9 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</span>
</div>
</div></footer>
--<script src="/shared/ov-mark.js?v=96079ebf2943" async></script>
--<script src="/shared/navbar.js?v=b50d9f47fc34"></script>
--<script src="/shared/footer.js?v=b99e512398d5"></script>
++<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
++<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
if (window.OpenVibeNavbar) { try { OpenVibeNavbar.init({ service: 'pics', apiBase: 'https://openvibe.network', links: [{ label: 'What it will be', href: '#what' }, { label: 'The network', href: 'https://openvibe.network/#network', external: false }], history: { type: 'page', title: 'OpenVibe.Pics' } }); } catch (e) {} }
ddiff --git a/dist/openvibe.pics/privacy.html b/dist/openvibe.pics/privacy.html
iindex 534c6e0..28e5669 100644
---- a/dist/openvibe.pics/privacy.html
++++ b/dist/openvibe.pics/privacy.html
@@@ -86,8 +86,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.pics/release.json b/dist/openvibe.pics/release.json
iindex 1f2de05..9a22085 100644
---- a/dist/openvibe.pics/release.json
++++ b/dist/openvibe.pics/release.json
@@@ -1,11 +1,11 @@
{
"service": "pics",
-- "release": "27c44060acbf",
-- "released_at": "2026-09-28T00:00:00.000Z",
++ "release": "39a983602623",
++ "released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.23.0"
++ "openvibe-shared": "1.28.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.pics/sitemap.xml b/dist/openvibe.pics/sitemap.xml
iindex fb30daa..2984c30 100644
---- a/dist/openvibe.pics/sitemap.xml
++++ b/dist/openvibe.pics/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.pics/</loc><lastmod>2026-09-28</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.pics/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.pics/status.json b/dist/openvibe.pics/status.json
iindex e0591c4..d8135e3 100644
---- a/dist/openvibe.pics/status.json
++++ b/dist/openvibe.pics/status.json
@@@ -11,6 +11,6 @@
"launchWaitsFor": "the shared image upload and processing service",
"factsAsOf": "2026-09-28",
"network": "https://openvibe.network",
-- "updated": "2026-09-28",
++ "updated": "2026-09-29",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.pics/terms.html b/dist/openvibe.pics/terms.html
iindex 30d1d03..ccff94e 100644
---- a/dist/openvibe.pics/terms.html
++++ b/dist/openvibe.pics/terms.html
@@@ -85,8 +85,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.quest/dmca.html b/dist/openvibe.quest/dmca.html
iindex f8e6bab..4dcf3dc 100644
---- a/dist/openvibe.quest/dmca.html
++++ b/dist/openvibe.quest/dmca.html
@@@ -80,8 +80,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.quest/index.html b/dist/openvibe.quest/index.html
iindex 830a5cc..fcc2976 100644
---- a/dist/openvibe.quest/index.html
++++ b/dist/openvibe.quest/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Quest — Quests across the whole network.">
<meta name="twitter:description" content="OpenVibe.Quest will be the network&#39;s shared quest and rewards system: quests that span every OpenVibe site, from a streamer&#39;s getting-started steps on OpenVibe.Live to community challenges, cosmetics and OpenCoins, moddable and open to anyone through the API.">
<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.quest/#site","url":"https://openvibe.quest/","name":"OpenVibe.Quest","description":"OpenVibe.Quest will be the network's shared quest and rewards system: quests that span every OpenVibe site, from a streamer's getting-started steps on OpenVibe.Live to community challenges, cosmetics and OpenCoins, moddable and open to anyone through the API.","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.quest/#page","url":"https://openvibe.quest/","name":"OpenVibe.Quest — Quests across the whole network.","description":"OpenVibe.Quest will be the network's shared quest and rewards system: quests that span every OpenVibe site, from a streamer's getting-started steps on OpenVibe.Live to community challenges, cosmetics and OpenCoins, moddable and open to anyone through the API.","isPartOf":{"@id":"https://openvibe.quest/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-28","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Quest","item":"https://openvibe.quest/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.quest/#site","url":"https://openvibe.quest/","name":"OpenVibe.Quest","description":"OpenVibe.Quest will be the network's shared quest and rewards system: quests that span every OpenVibe site, from a streamer's getting-started steps on OpenVibe.Live to community challenges, cosmetics and OpenCoins, moddable and open to anyone through the API.","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.quest/#page","url":"https://openvibe.quest/","name":"OpenVibe.Quest — Quests across the whole network.","description":"OpenVibe.Quest will be the network's shared quest and rewards system: quests that span every OpenVibe site, from a streamer's getting-started steps on OpenVibe.Live to community challenges, cosmetics and OpenCoins, moddable and open to anyone through the API.","isPartOf":{"@id":"https://openvibe.quest/#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.Quest","item":"https://openvibe.quest/"}]}}]}</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=d9b9af081efe" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -230,8 +230,8 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
@@@ -273,9 +273,9 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</span>
</div>
</div></footer>
--<script src="/shared/ov-mark.js?v=96079ebf2943" async></script>
--<script src="/shared/navbar.js?v=b50d9f47fc34"></script>
--<script src="/shared/footer.js?v=b99e512398d5"></script>
++<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
++<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
if (window.OpenVibeNavbar) { try { OpenVibeNavbar.init({ service: 'quest', apiBase: 'https://openvibe.network', links: [{ label: 'What it will be', href: '#what' }, { label: 'The network', href: 'https://openvibe.network/#network', external: false }], history: { type: 'page', title: 'OpenVibe.Quest' } }); } catch (e) {} }
ddiff --git a/dist/openvibe.quest/privacy.html b/dist/openvibe.quest/privacy.html
iindex f56aea8..8eb92d6 100644
---- a/dist/openvibe.quest/privacy.html
++++ b/dist/openvibe.quest/privacy.html
@@@ -86,8 +86,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.quest/release.json b/dist/openvibe.quest/release.json
iindex 80b0db2..c9f63a3 100644
---- a/dist/openvibe.quest/release.json
++++ b/dist/openvibe.quest/release.json
@@@ -1,11 +1,11 @@
{
"service": "quest",
-- "release": "d71782485c2a",
-- "released_at": "2026-09-28T00:00:00.000Z",
++ "release": "5efb54a79d2b",
++ "released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.23.0"
++ "openvibe-shared": "1.28.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.quest/sitemap.xml b/dist/openvibe.quest/sitemap.xml
iindex d9a5822..0e93705 100644
---- a/dist/openvibe.quest/sitemap.xml
++++ b/dist/openvibe.quest/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.quest/</loc><lastmod>2026-09-28</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.quest/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.quest/status.json b/dist/openvibe.quest/status.json
iindex c9a62ff..1fe6af2 100644
---- a/dist/openvibe.quest/status.json
++++ b/dist/openvibe.quest/status.json
@@@ -11,6 +11,6 @@
"launchWaitsFor": "the shared quest service",
"factsAsOf": "2026-09-28",
"network": "https://openvibe.network",
-- "updated": "2026-09-28",
++ "updated": "2026-09-29",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.quest/terms.html b/dist/openvibe.quest/terms.html
iindex 666917b..f062dd5 100644
---- a/dist/openvibe.quest/terms.html
++++ b/dist/openvibe.quest/terms.html
@@@ -85,8 +85,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.rent/dmca.html b/dist/openvibe.rent/dmca.html
iindex 7ce630d..60b8730 100644
---- a/dist/openvibe.rent/dmca.html
++++ b/dist/openvibe.rent/dmca.html
@@@ -80,8 +80,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.rent/index.html b/dist/openvibe.rent/index.html
iindex f951853..d1bebc1 100644
---- a/dist/openvibe.rent/index.html
++++ b/dist/openvibe.rent/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Rent — Every rental, one search.">
<meta name="twitter:description" content="OpenVibe.Rent will bring rentals into one place: apartments, rooms, commercial space, equipment and services from many listing sites, with alerts, AI summaries that link their sources, and one OpenVibe account for your searches.">
<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.rent/#site","url":"https://openvibe.rent/","name":"OpenVibe.Rent","description":"OpenVibe.Rent will bring rentals into one place: apartments, rooms, commercial space, equipment and services from many listing sites, with alerts, AI summaries that link their sources, and one OpenVibe account for your searches.","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.rent/#page","url":"https://openvibe.rent/","name":"OpenVibe.Rent — Every rental, one search.","description":"OpenVibe.Rent will bring rentals into one place: apartments, rooms, commercial space, equipment and services from many listing sites, with alerts, AI summaries that link their sources, and one OpenVibe account for your searches.","isPartOf":{"@id":"https://openvibe.rent/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-28","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Rent","item":"https://openvibe.rent/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.rent/#site","url":"https://openvibe.rent/","name":"OpenVibe.Rent","description":"OpenVibe.Rent will bring rentals into one place: apartments, rooms, commercial space, equipment and services from many listing sites, with alerts, AI summaries that link their sources, and one OpenVibe account for your searches.","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.rent/#page","url":"https://openvibe.rent/","name":"OpenVibe.Rent — Every rental, one search.","description":"OpenVibe.Rent will bring rentals into one place: apartments, rooms, commercial space, equipment and services from many listing sites, with alerts, AI summaries that link their sources, and one OpenVibe account for your searches.","isPartOf":{"@id":"https://openvibe.rent/#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.Rent","item":"https://openvibe.rent/"}]}}]}</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=d9b9af081efe" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -230,8 +230,8 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
@@@ -273,9 +273,9 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</span>
</div>
</div></footer>
--<script src="/shared/ov-mark.js?v=96079ebf2943" async></script>
--<script src="/shared/navbar.js?v=b50d9f47fc34"></script>
--<script src="/shared/footer.js?v=b99e512398d5"></script>
++<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
++<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
if (window.OpenVibeNavbar) { try { OpenVibeNavbar.init({ service: 'rent', apiBase: 'https://openvibe.network', links: [{ label: 'What it will be', href: '#what' }, { label: 'The network', href: 'https://openvibe.network/#network', external: false }], history: { type: 'page', title: 'OpenVibe.Rent' } }); } catch (e) {} }
ddiff --git a/dist/openvibe.rent/privacy.html b/dist/openvibe.rent/privacy.html
iindex 040ed6e..8e0e3db 100644
---- a/dist/openvibe.rent/privacy.html
++++ b/dist/openvibe.rent/privacy.html
@@@ -86,8 +86,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.rent/release.json b/dist/openvibe.rent/release.json
iindex 6f62448..2058890 100644
---- a/dist/openvibe.rent/release.json
++++ b/dist/openvibe.rent/release.json
@@@ -1,11 +1,11 @@
{
"service": "rent",
-- "release": "dd83fd3e5ed5",
-- "released_at": "2026-09-28T00:00:00.000Z",
++ "release": "a8dd0a2e3480",
++ "released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.23.0"
++ "openvibe-shared": "1.28.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.rent/sitemap.xml b/dist/openvibe.rent/sitemap.xml
iindex 5ce3527..dba1984 100644
---- a/dist/openvibe.rent/sitemap.xml
++++ b/dist/openvibe.rent/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.rent/</loc><lastmod>2026-09-28</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.rent/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.rent/status.json b/dist/openvibe.rent/status.json
iindex add46d1..6eb225c 100644
---- a/dist/openvibe.rent/status.json
++++ b/dist/openvibe.rent/status.json
@@@ -11,6 +11,6 @@
"launchWaitsFor": "verified listing sources and the shared discovery system",
"factsAsOf": "2026-09-28",
"network": "https://openvibe.network",
-- "updated": "2026-09-28",
++ "updated": "2026-09-29",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.rent/terms.html b/dist/openvibe.rent/terms.html
iindex 523c049..e2827f6 100644
---- a/dist/openvibe.rent/terms.html
++++ b/dist/openvibe.rent/terms.html
@@@ -85,8 +85,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.reviews/dmca.html b/dist/openvibe.reviews/dmca.html
iindex 907914d..907bdbf 100644
---- a/dist/openvibe.reviews/dmca.html
++++ b/dist/openvibe.reviews/dmca.html
@@@ -81,8 +81,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.reviews/index.html b/dist/openvibe.reviews/index.html
iindex 19ab542..75330bb 100644
---- a/dist/openvibe.reviews/index.html
++++ b/dist/openvibe.reviews/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Reviews — What people actually say.">
<meta name="twitter:description" content="OpenVibe.Reviews gathers what people say about products, services, employers, hosts and communities across many sources — with provenance, without fake ratings — and lets the community discuss it.">
<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.reviews/#site","url":"https://openvibe.reviews/","name":"OpenVibe.Reviews","description":"OpenVibe.Reviews gathers what people say about products, services, employers, hosts and communities across many sources — with provenance, without fake ratings — and lets the community discuss it.","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.reviews/#page","url":"https://openvibe.reviews/","name":"OpenVibe.Reviews — What people actually say.","description":"OpenVibe.Reviews gathers what people say about products, services, employers, hosts and communities across many sources — with provenance, without fake ratings — and lets the community discuss it.","isPartOf":{"@id":"https://openvibe.reviews/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-28","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Reviews","item":"https://openvibe.reviews/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.reviews/#site","url":"https://openvibe.reviews/","name":"OpenVibe.Reviews","description":"OpenVibe.Reviews gathers what people say about products, services, employers, hosts and communities across many sources — with provenance, without fake ratings — and lets the community discuss it.","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.reviews/#page","url":"https://openvibe.reviews/","name":"OpenVibe.Reviews — What people actually say.","description":"OpenVibe.Reviews gathers what people say about products, services, employers, hosts and communities across many sources — with provenance, without fake ratings — and lets the community discuss it.","isPartOf":{"@id":"https://openvibe.reviews/#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.Reviews","item":"https://openvibe.reviews/"}]}}]}</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=d9b9af081efe" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -230,8 +230,8 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
@@@ -273,9 +273,9 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</span>
</div>
</div></footer>
--<script src="/shared/ov-mark.js?v=96079ebf2943" async></script>
--<script src="/shared/navbar.js?v=b50d9f47fc34"></script>
--<script src="/shared/footer.js?v=b99e512398d5"></script>
++<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
++<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
if (window.OpenVibeNavbar) { try { OpenVibeNavbar.init({ service: 'reviews', apiBase: 'https://openvibe.network', links: [{ label: 'What it will be', href: '#what' }, { label: 'The network', href: 'https://openvibe.network/#network', external: false }], history: { type: 'page', title: 'OpenVibe.Reviews' } }); } catch (e) {} }
ddiff --git a/dist/openvibe.reviews/privacy.html b/dist/openvibe.reviews/privacy.html
iindex c175bd2..66b7b8c 100644
---- a/dist/openvibe.reviews/privacy.html
++++ b/dist/openvibe.reviews/privacy.html
@@@ -86,8 +86,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.reviews/release.json b/dist/openvibe.reviews/release.json
iindex dcb403a..f504f9f 100644
---- a/dist/openvibe.reviews/release.json
++++ b/dist/openvibe.reviews/release.json
@@@ -1,11 +1,11 @@
{
"service": "reviews",
-- "release": "bc8f69092c75",
-- "released_at": "2026-09-28T00:00:00.000Z",
++ "release": "c6f8a310c542",
++ "released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.23.0"
++ "openvibe-shared": "1.28.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.reviews/sitemap.xml b/dist/openvibe.reviews/sitemap.xml
iindex b6878a7..2eaa5ec 100644
---- a/dist/openvibe.reviews/sitemap.xml
++++ b/dist/openvibe.reviews/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.reviews/</loc><lastmod>2026-09-28</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.reviews/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.reviews/status.json b/dist/openvibe.reviews/status.json
iindex d402d88..9dc4b6e 100644
---- a/dist/openvibe.reviews/status.json
++++ b/dist/openvibe.reviews/status.json
@@@ -18,6 +18,6 @@
"launchWaitsFor": "a person to verify a review source's terms and an editor to publish the first reviewed summary",
"factsAsOf": "2026-09-28",
"network": "https://openvibe.network",
-- "updated": "2026-09-28",
++ "updated": "2026-09-29",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.reviews/terms.html b/dist/openvibe.reviews/terms.html
iindex 9394170..76083d0 100644
---- a/dist/openvibe.reviews/terms.html
++++ b/dist/openvibe.reviews/terms.html
@@@ -87,8 +87,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.run/dmca.html b/dist/openvibe.run/dmca.html
iindex 606d372..c5b91b2 100644
---- a/dist/openvibe.run/dmca.html
++++ b/dist/openvibe.run/dmca.html
@@@ -80,8 +80,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.run/index.html b/dist/openvibe.run/index.html
iindex f1522b1..752328c 100644
---- a/dist/openvibe.run/index.html
++++ b/dist/openvibe.run/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Run — Run anything, safely.">
<meta name="twitter:description" content="OpenVibe.Run will run code, tools and AI agent tasks in sandboxes: quick jobs in WebAssembly, full environments in small virtual machines, with queued jobs, live output, and files through OpenVibe.Download. A free, limited tier for everyone, and the engine the rest of the network uses to get work done.">
<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.run/#site","url":"https://openvibe.run/","name":"OpenVibe.Run","description":"OpenVibe.Run will run code, tools and AI agent tasks in sandboxes: quick jobs in WebAssembly, full environments in small virtual machines, with queued jobs, live output, and files through OpenVibe.Download. A free, limited tier for everyone, and the engine the rest of the network uses to get work done.","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.run/#page","url":"https://openvibe.run/","name":"OpenVibe.Run — Run anything, safely.","description":"OpenVibe.Run will run code, tools and AI agent tasks in sandboxes: quick jobs in WebAssembly, full environments in small virtual machines, with queued jobs, live output, and files through OpenVibe.Download. A free, limited tier for everyone, and the engine the rest of the network uses to get work done.","isPartOf":{"@id":"https://openvibe.run/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-28","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Run","item":"https://openvibe.run/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.run/#site","url":"https://openvibe.run/","name":"OpenVibe.Run","description":"OpenVibe.Run will run code, tools and AI agent tasks in sandboxes: quick jobs in WebAssembly, full environments in small virtual machines, with queued jobs, live output, and files through OpenVibe.Download. A free, limited tier for everyone, and the engine the rest of the network uses to get work done.","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.run/#page","url":"https://openvibe.run/","name":"OpenVibe.Run — Run anything, safely.","description":"OpenVibe.Run will run code, tools and AI agent tasks in sandboxes: quick jobs in WebAssembly, full environments in small virtual machines, with queued jobs, live output, and files through OpenVibe.Download. A free, limited tier for everyone, and the engine the rest of the network uses to get work done.","isPartOf":{"@id":"https://openvibe.run/#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.Run","item":"https://openvibe.run/"}]}}]}</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=d9b9af081efe" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -230,8 +230,8 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
@@@ -273,9 +273,9 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</span>
</div>
</div></footer>
--<script src="/shared/ov-mark.js?v=96079ebf2943" async></script>
--<script src="/shared/navbar.js?v=b50d9f47fc34"></script>
--<script src="/shared/footer.js?v=b99e512398d5"></script>
++<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
++<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
if (window.OpenVibeNavbar) { try { OpenVibeNavbar.init({ service: 'run', apiBase: 'https://openvibe.network', links: [{ label: 'What it will be', href: '#what' }, { label: 'The network', href: 'https://openvibe.network/#network', external: false }], history: { type: 'page', title: 'OpenVibe.Run' } }); } catch (e) {} }
ddiff --git a/dist/openvibe.run/privacy.html b/dist/openvibe.run/privacy.html
iindex 59e5175..6e220ba 100644
---- a/dist/openvibe.run/privacy.html
++++ b/dist/openvibe.run/privacy.html
@@@ -86,8 +86,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.run/release.json b/dist/openvibe.run/release.json
iindex 8a7fc99..f35e167 100644
---- a/dist/openvibe.run/release.json
++++ b/dist/openvibe.run/release.json
@@@ -1,11 +1,11 @@
{
"service": "run",
-- "release": "dcc6624d9014",
-- "released_at": "2026-09-28T00:00:00.000Z",
++ "release": "8909e1162314",
++ "released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.23.0"
++ "openvibe-shared": "1.28.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.run/sitemap.xml b/dist/openvibe.run/sitemap.xml
iindex d2f4918..8485b5b 100644
---- a/dist/openvibe.run/sitemap.xml
++++ b/dist/openvibe.run/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.run/</loc><lastmod>2026-09-28</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.run/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.run/status.json b/dist/openvibe.run/status.json
iindex 8615c66..b0412c8 100644
---- a/dist/openvibe.run/status.json
++++ b/dist/openvibe.run/status.json
@@@ -11,6 +11,6 @@
"launchWaitsFor": "the sandbox runtime",
"factsAsOf": "2026-09-28",
"network": "https://openvibe.network",
-- "updated": "2026-09-28",
++ "updated": "2026-09-29",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.run/terms.html b/dist/openvibe.run/terms.html
iindex 4f27131..671428d 100644
---- a/dist/openvibe.run/terms.html
++++ b/dist/openvibe.run/terms.html
@@@ -85,8 +85,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.services/dmca.html b/dist/openvibe.services/dmca.html
iindex 530f35a..d87fe3d 100644
---- a/dist/openvibe.services/dmca.html
++++ b/dist/openvibe.services/dmca.html
@@@ -80,8 +80,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.services/index.html b/dist/openvibe.services/index.html
iindex 1bebd48..23653df 100644
---- a/dist/openvibe.services/index.html
++++ b/dist/openvibe.services/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Services — Build with the whole network.">
<meta name="twitter:description" content="OpenVibe.Services will be the way into everything programmable on OpenVibe. Start from what you want to build (monitor a page and summarise changes, run an AI agent, process uploads, control a robot, add support to a site) and it assembles the services, keys, permissions and working code for you. Then operate it all in one place: projects, grants, usage, quotas, runs, events, deploys and health, with each service keeping its own data.">
<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.services/#site","url":"https://openvibe.services/","name":"OpenVibe.Services","description":"OpenVibe.Services will be the way into everything programmable on OpenVibe. Start from what you want to build (monitor a page and summarise changes, run an AI agent, process uploads, control a robot, add support to a site) and it assembles the services, keys, permissions and working code for you. Then operate it all in one place: projects, grants, usage, quotas, runs, events, deploys and health, with each service keeping its own data.","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.services/#page","url":"https://openvibe.services/","name":"OpenVibe.Services — Build with the whole network.","description":"OpenVibe.Services will be the way into everything programmable on OpenVibe. Start from what you want to build (monitor a page and summarise changes, run an AI agent, process uploads, control a robot, add support to a site) and it assembles the services, keys, permissions and working code for you. Then operate it all in one place: projects, grants, usage, quotas, runs, events, deploys and health, with each service keeping its own data.","isPartOf":{"@id":"https://openvibe.services/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-28","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Services","item":"https://openvibe.services/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.services/#site","url":"https://openvibe.services/","name":"OpenVibe.Services","description":"OpenVibe.Services will be the way into everything programmable on OpenVibe. Start from what you want to build (monitor a page and summarise changes, run an AI agent, process uploads, control a robot, add support to a site) and it assembles the services, keys, permissions and working code for you. Then operate it all in one place: projects, grants, usage, quotas, runs, events, deploys and health, with each service keeping its own data.","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.services/#page","url":"https://openvibe.services/","name":"OpenVibe.Services — Build with the whole network.","description":"OpenVibe.Services will be the way into everything programmable on OpenVibe. Start from what you want to build (monitor a page and summarise changes, run an AI agent, process uploads, control a robot, add support to a site) and it assembles the services, keys, permissions and working code for you. Then operate it all in one place: projects, grants, usage, quotas, runs, events, deploys and health, with each service keeping its own data.","isPartOf":{"@id":"https://openvibe.services/#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.Services","item":"https://openvibe.services/"}]}}]}</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=d9b9af081efe" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -230,8 +230,8 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
@@@ -273,9 +273,9 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</span>
</div>
</div></footer>
--<script src="/shared/ov-mark.js?v=96079ebf2943" async></script>
--<script src="/shared/navbar.js?v=b50d9f47fc34"></script>
--<script src="/shared/footer.js?v=b99e512398d5"></script>
++<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
++<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
if (window.OpenVibeNavbar) { try { OpenVibeNavbar.init({ service: 'services', apiBase: 'https://openvibe.network', links: [{ label: 'What it will be', href: '#what' }, { label: 'The network', href: 'https://openvibe.network/#network', external: false }], history: { type: 'page', title: 'OpenVibe.Services' } }); } catch (e) {} }
ddiff --git a/dist/openvibe.services/privacy.html b/dist/openvibe.services/privacy.html
iindex 0f4dc81..c37ed62 100644
---- a/dist/openvibe.services/privacy.html
++++ b/dist/openvibe.services/privacy.html
@@@ -86,8 +86,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.services/release.json b/dist/openvibe.services/release.json
iindex ca315f2..171d14b 100644
---- a/dist/openvibe.services/release.json
++++ b/dist/openvibe.services/release.json
@@@ -1,11 +1,11 @@
{
"service": "services",
-- "release": "ac598b890281",
-- "released_at": "2026-09-28T00:00:00.000Z",
++ "release": "27b55fe55c9d",
++ "released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.23.0"
++ "openvibe-shared": "1.28.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.services/sitemap.xml b/dist/openvibe.services/sitemap.xml
iindex 13e8a2b..43150af 100644
---- a/dist/openvibe.services/sitemap.xml
++++ b/dist/openvibe.services/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.services/</loc><lastmod>2026-09-28</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.services/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.services/status.json b/dist/openvibe.services/status.json
iindex 01a8bea..e9d2cba 100644
---- a/dist/openvibe.services/status.json
++++ b/dist/openvibe.services/status.json
@@@ -11,6 +11,6 @@
"launchWaitsFor": "the catalog and console over the services that already run (AI, Events, Media, Search, Sources, Host, Tools)",
"factsAsOf": "2026-09-28",
"network": "https://openvibe.network",
-- "updated": "2026-09-28",
++ "updated": "2026-09-29",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.services/terms.html b/dist/openvibe.services/terms.html
iindex 69438fa..e5775fb 100644
---- a/dist/openvibe.services/terms.html
++++ b/dist/openvibe.services/terms.html
@@@ -85,8 +85,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.space/dmca.html b/dist/openvibe.space/dmca.html
iindex 818b161..6dddaa4 100644
---- a/dist/openvibe.space/dmca.html
++++ b/dist/openvibe.space/dmca.html
@@@ -80,8 +80,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.space/index.html b/dist/openvibe.space/index.html
iindex 21b0336..4982d00 100644
---- a/dist/openvibe.space/index.html
++++ b/dist/openvibe.space/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Space — Start a forum for anything.">
<meta name="twitter:description" content="OpenVibe.Space will be the forums of the OpenVibe network: create a forum for any topic, with the depth of classic boards like XenForo and phpBB, the feel of a modern community, and AI help for topics, research and moderation. The forums on OpenVibe.Community move here when it launches.">
<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.space/#site","url":"https://openvibe.space/","name":"OpenVibe.Space","description":"OpenVibe.Space will be the forums of the OpenVibe network: create a forum for any topic, with the depth of classic boards like XenForo and phpBB, the feel of a modern community, and AI help for topics, research and moderation. The forums on OpenVibe.Community move here when it launches.","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.space/#page","url":"https://openvibe.space/","name":"OpenVibe.Space — Start a forum for anything.","description":"OpenVibe.Space will be the forums of the OpenVibe network: create a forum for any topic, with the depth of classic boards like XenForo and phpBB, the feel of a modern community, and AI help for topics, research and moderation. The forums on OpenVibe.Community move here when it launches.","isPartOf":{"@id":"https://openvibe.space/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-28","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Space","item":"https://openvibe.space/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.space/#site","url":"https://openvibe.space/","name":"OpenVibe.Space","description":"OpenVibe.Space will be the forums of the OpenVibe network: create a forum for any topic, with the depth of classic boards like XenForo and phpBB, the feel of a modern community, and AI help for topics, research and moderation. The forums on OpenVibe.Community move here when it launches.","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.space/#page","url":"https://openvibe.space/","name":"OpenVibe.Space — Start a forum for anything.","description":"OpenVibe.Space will be the forums of the OpenVibe network: create a forum for any topic, with the depth of classic boards like XenForo and phpBB, the feel of a modern community, and AI help for topics, research and moderation. The forums on OpenVibe.Community move here when it launches.","isPartOf":{"@id":"https://openvibe.space/#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.Space","item":"https://openvibe.space/"}]}}]}</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=d9b9af081efe" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -230,8 +230,8 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
@@@ -273,9 +273,9 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</span>
</div>
</div></footer>
--<script src="/shared/ov-mark.js?v=96079ebf2943" async></script>
--<script src="/shared/navbar.js?v=b50d9f47fc34"></script>
--<script src="/shared/footer.js?v=b99e512398d5"></script>
++<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
++<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
if (window.OpenVibeNavbar) { try { OpenVibeNavbar.init({ service: 'space', apiBase: 'https://openvibe.network', links: [{ label: 'What it will be', href: '#what' }, { label: 'The network', href: 'https://openvibe.network/#network', external: false }], history: { type: 'page', title: 'OpenVibe.Space' } }); } catch (e) {} }
ddiff --git a/dist/openvibe.space/privacy.html b/dist/openvibe.space/privacy.html
iindex bb673dc..d07fd68 100644
---- a/dist/openvibe.space/privacy.html
++++ b/dist/openvibe.space/privacy.html
@@@ -86,8 +86,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.space/release.json b/dist/openvibe.space/release.json
iindex b24aef8..ef54b59 100644
---- a/dist/openvibe.space/release.json
++++ b/dist/openvibe.space/release.json
@@@ -1,11 +1,11 @@
{
"service": "space",
-- "release": "f2e2d0654a13",
-- "released_at": "2026-09-28T00:00:00.000Z",
++ "release": "59156b9dce38",
++ "released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.23.0"
++ "openvibe-shared": "1.28.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.space/sitemap.xml b/dist/openvibe.space/sitemap.xml
iindex 47e3182..dc8391c 100644
---- a/dist/openvibe.space/sitemap.xml
++++ b/dist/openvibe.space/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.space/</loc><lastmod>2026-09-28</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.space/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.space/status.json b/dist/openvibe.space/status.json
iindex cbc8094..c785c0b 100644
---- a/dist/openvibe.space/status.json
++++ b/dist/openvibe.space/status.json
@@@ -11,6 +11,6 @@
"launchWaitsFor": "the forum engine moving over from OpenVibe.Community",
"factsAsOf": "2026-09-28",
"network": "https://openvibe.network",
-- "updated": "2026-09-28",
++ "updated": "2026-09-29",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.space/terms.html b/dist/openvibe.space/terms.html
iindex 04e7fc6..67e010a 100644
---- a/dist/openvibe.space/terms.html
++++ b/dist/openvibe.space/terms.html
@@@ -85,8 +85,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.tips/dmca.html b/dist/openvibe.tips/dmca.html
iindex b9c7f18..48c4536 100644
---- a/dist/openvibe.tips/dmca.html
++++ b/dist/openvibe.tips/dmca.html
@@@ -81,8 +81,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.tips/index.html b/dist/openvibe.tips/index.html
iindex c390129..7ced1b2 100644
---- a/dist/openvibe.tips/index.html
++++ b/dist/openvibe.tips/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Tips — Support the people you watch.">
<meta name="twitter:description" content="OpenVibe.Tips is the tipping and alerts layer of the OpenVibe network: tips, donation goals, superchats, paid text-to-speech and media requests, with alert overlays for creators.">
<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.tips/#site","url":"https://openvibe.tips/","name":"OpenVibe.Tips","description":"OpenVibe.Tips is the tipping and alerts layer of the OpenVibe network: tips, donation goals, superchats, paid text-to-speech and media requests, with alert overlays for creators.","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.tips/#page","url":"https://openvibe.tips/","name":"OpenVibe.Tips — Support the people you watch.","description":"OpenVibe.Tips is the tipping and alerts layer of the OpenVibe network: tips, donation goals, superchats, paid text-to-speech and media requests, with alert overlays for creators.","isPartOf":{"@id":"https://openvibe.tips/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-28","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Tips","item":"https://openvibe.tips/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.tips/#site","url":"https://openvibe.tips/","name":"OpenVibe.Tips","description":"OpenVibe.Tips is the tipping and alerts layer of the OpenVibe network: tips, donation goals, superchats, paid text-to-speech and media requests, with alert overlays for creators.","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.tips/#page","url":"https://openvibe.tips/","name":"OpenVibe.Tips — Support the people you watch.","description":"OpenVibe.Tips is the tipping and alerts layer of the OpenVibe network: tips, donation goals, superchats, paid text-to-speech and media requests, with alert overlays for creators.","isPartOf":{"@id":"https://openvibe.tips/#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.Tips","item":"https://openvibe.tips/"}]}}]}</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=d9b9af081efe" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -230,8 +230,8 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
@@@ -273,9 +273,9 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</span>
</div>
</div></footer>
--<script src="/shared/ov-mark.js?v=96079ebf2943" async></script>
--<script src="/shared/navbar.js?v=b50d9f47fc34"></script>
--<script src="/shared/footer.js?v=b99e512398d5"></script>
++<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
++<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
if (window.OpenVibeNavbar) { try { OpenVibeNavbar.init({ service: 'tips', apiBase: 'https://openvibe.network', links: [{ label: 'What it will be', href: '#what' }, { label: 'The network', href: 'https://openvibe.network/#network', external: false }], history: { type: 'page', title: 'OpenVibe.Tips' } }); } catch (e) {} }
ddiff --git a/dist/openvibe.tips/privacy.html b/dist/openvibe.tips/privacy.html
iindex 21af9ea..a1e494a 100644
---- a/dist/openvibe.tips/privacy.html
++++ b/dist/openvibe.tips/privacy.html
@@@ -86,8 +86,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.tips/release.json b/dist/openvibe.tips/release.json
iindex f892c01..eb236f7 100644
---- a/dist/openvibe.tips/release.json
++++ b/dist/openvibe.tips/release.json
@@@ -1,11 +1,11 @@
{
"service": "tips",
-- "release": "a70c82f6338c",
-- "released_at": "2026-09-28T00:00:00.000Z",
++ "release": "0a3807db22a4",
++ "released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.23.0"
++ "openvibe-shared": "1.28.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.tips/sitemap.xml b/dist/openvibe.tips/sitemap.xml
iindex 6682cee..92c4b46 100644
---- a/dist/openvibe.tips/sitemap.xml
++++ b/dist/openvibe.tips/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.tips/</loc><lastmod>2026-09-28</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.tips/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.tips/status.json b/dist/openvibe.tips/status.json
iindex 2b85aa3..e358197 100644
---- a/dist/openvibe.tips/status.json
++++ b/dist/openvibe.tips/status.json
@@@ -18,6 +18,6 @@
"launchWaitsFor": "the payments cutover to OpenVibe.Billing and a security review; tips keep working on OpenVibe.Live meanwhile",
"factsAsOf": "2026-09-28",
"network": "https://openvibe.network",
-- "updated": "2026-09-28",
++ "updated": "2026-09-29",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.tips/terms.html b/dist/openvibe.tips/terms.html
iindex 0d9a229..aac4bbc 100644
---- a/dist/openvibe.tips/terms.html
++++ b/dist/openvibe.tips/terms.html
@@@ -88,8 +88,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.trade/dmca.html b/dist/openvibe.trade/dmca.html
iindex cafc318..04e0487 100644
---- a/dist/openvibe.trade/dmca.html
++++ b/dist/openvibe.trade/dmca.html
@@@ -81,8 +81,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.trade/index.html b/dist/openvibe.trade/index.html
iindex a19dceb..da62d99 100644
---- a/dist/openvibe.trade/index.html
++++ b/dist/openvibe.trade/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Trade — Watch, discuss, decide.">
<meta name="twitter:description" content="OpenVibe.Trade is the market intelligence room of the OpenVibe network: watchlists, alerts, summaries and community discussion for markets, collectibles and deals — information and tools, never advice.">
<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.trade/#site","url":"https://openvibe.trade/","name":"OpenVibe.Trade","description":"OpenVibe.Trade is the market intelligence room of the OpenVibe network: watchlists, alerts, summaries and community discussion for markets, collectibles and deals — information and tools, never advice.","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.trade/#page","url":"https://openvibe.trade/","name":"OpenVibe.Trade — Watch, discuss, decide.","description":"OpenVibe.Trade is the market intelligence room of the OpenVibe network: watchlists, alerts, summaries and community discussion for markets, collectibles and deals — information and tools, never advice.","isPartOf":{"@id":"https://openvibe.trade/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-28","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Trade","item":"https://openvibe.trade/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.trade/#site","url":"https://openvibe.trade/","name":"OpenVibe.Trade","description":"OpenVibe.Trade is the market intelligence room of the OpenVibe network: watchlists, alerts, summaries and community discussion for markets, collectibles and deals — information and tools, never advice.","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.trade/#page","url":"https://openvibe.trade/","name":"OpenVibe.Trade — Watch, discuss, decide.","description":"OpenVibe.Trade is the market intelligence room of the OpenVibe network: watchlists, alerts, summaries and community discussion for markets, collectibles and deals — information and tools, never advice.","isPartOf":{"@id":"https://openvibe.trade/#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.Trade","item":"https://openvibe.trade/"}]}}]}</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=d9b9af081efe" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -230,8 +230,8 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
@@@ -273,9 +273,9 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</span>
</div>
</div></footer>
--<script src="/shared/ov-mark.js?v=96079ebf2943" async></script>
--<script src="/shared/navbar.js?v=b50d9f47fc34"></script>
--<script src="/shared/footer.js?v=b99e512398d5"></script>
++<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
++<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
if (window.OpenVibeNavbar) { try { OpenVibeNavbar.init({ service: 'trade', apiBase: 'https://openvibe.network', links: [{ label: 'What it will be', href: '#what' }, { label: 'The network', href: 'https://openvibe.network/#network', external: false }], history: { type: 'page', title: 'OpenVibe.Trade' } }); } catch (e) {} }
ddiff --git a/dist/openvibe.trade/privacy.html b/dist/openvibe.trade/privacy.html
iindex db099bd..8306c05 100644
---- a/dist/openvibe.trade/privacy.html
++++ b/dist/openvibe.trade/privacy.html
@@@ -86,8 +86,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.trade/release.json b/dist/openvibe.trade/release.json
iindex 7082c33..4ac159c 100644
---- a/dist/openvibe.trade/release.json
++++ b/dist/openvibe.trade/release.json
@@@ -1,11 +1,11 @@
{
"service": "trade",
-- "release": "2b9c3630221c",
-- "released_at": "2026-09-28T00:00:00.000Z",
++ "release": "b2426e78c850",
++ "released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.23.0"
++ "openvibe-shared": "1.28.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.trade/sitemap.xml b/dist/openvibe.trade/sitemap.xml
iindex 9d6bf93..c18629e 100644
---- a/dist/openvibe.trade/sitemap.xml
++++ b/dist/openvibe.trade/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.trade/</loc><lastmod>2026-09-28</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.trade/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.trade/status.json b/dist/openvibe.trade/status.json
iindex 9b8a9fb..ca87257 100644
---- a/dist/openvibe.trade/status.json
++++ b/dist/openvibe.trade/status.json
@@@ -18,6 +18,6 @@
"launchWaitsFor": "a verified data source and editors adding the first instruments",
"factsAsOf": "2026-09-28",
"network": "https://openvibe.network",
-- "updated": "2026-09-28",
++ "updated": "2026-09-29",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.trade/terms.html b/dist/openvibe.trade/terms.html
iindex b74489a..26d674d 100644
---- a/dist/openvibe.trade/terms.html
++++ b/dist/openvibe.trade/terms.html
@@@ -87,8 +87,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.video/dmca.html b/dist/openvibe.video/dmca.html
iindex 70ecada..67bb24d 100644
---- a/dist/openvibe.video/dmca.html
++++ b/dist/openvibe.video/dmca.html
@@@ -80,8 +80,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.video/index.html b/dist/openvibe.video/index.html
iindex a911ea6..88d0e9a 100644
---- a/dist/openvibe.video/index.html
++++ b/dist/openvibe.video/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Video — Your videos, everywhere.">
<meta name="twitter:description" content="OpenVibe.Video will be the home of long-form video on the OpenVibe network: watch pages, channels and playlists for uploads and past streams, a creator tool that publishes one upload to many platforms, and AI captions, highlights and editing, delivered by OpenVibe.Media.">
<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.video/#site","url":"https://openvibe.video/","name":"OpenVibe.Video","description":"OpenVibe.Video will be the home of long-form video on the OpenVibe network: watch pages, channels and playlists for uploads and past streams, a creator tool that publishes one upload to many platforms, and AI captions, highlights and editing, delivered by OpenVibe.Media.","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.video/#page","url":"https://openvibe.video/","name":"OpenVibe.Video — Your videos, everywhere.","description":"OpenVibe.Video will be the home of long-form video on the OpenVibe network: watch pages, channels and playlists for uploads and past streams, a creator tool that publishes one upload to many platforms, and AI captions, highlights and editing, delivered by OpenVibe.Media.","isPartOf":{"@id":"https://openvibe.video/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-28","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Video","item":"https://openvibe.video/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.video/#site","url":"https://openvibe.video/","name":"OpenVibe.Video","description":"OpenVibe.Video will be the home of long-form video on the OpenVibe network: watch pages, channels and playlists for uploads and past streams, a creator tool that publishes one upload to many platforms, and AI captions, highlights and editing, delivered by OpenVibe.Media.","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.video/#page","url":"https://openvibe.video/","name":"OpenVibe.Video — Your videos, everywhere.","description":"OpenVibe.Video will be the home of long-form video on the OpenVibe network: watch pages, channels and playlists for uploads and past streams, a creator tool that publishes one upload to many platforms, and AI captions, highlights and editing, delivered by OpenVibe.Media.","isPartOf":{"@id":"https://openvibe.video/#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.Video","item":"https://openvibe.video/"}]}}]}</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=d9b9af081efe" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -231,8 +231,8 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
@@@ -274,9 +274,9 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</span>
</div>
</div></footer>
--<script src="/shared/ov-mark.js?v=96079ebf2943" async></script>
--<script src="/shared/navbar.js?v=b50d9f47fc34"></script>
--<script src="/shared/footer.js?v=b99e512398d5"></script>
++<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
++<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
if (window.OpenVibeNavbar) { try { OpenVibeNavbar.init({ service: 'video', apiBase: 'https://openvibe.network', links: [{ label: 'What it will be', href: '#what' }, { label: 'The network', href: 'https://openvibe.network/#network', external: false }], history: { type: 'page', title: 'OpenVibe.Video' } }); } catch (e) {} }
ddiff --git a/dist/openvibe.video/privacy.html b/dist/openvibe.video/privacy.html
iindex b1afe1c..48dd9a0 100644
---- a/dist/openvibe.video/privacy.html
++++ b/dist/openvibe.video/privacy.html
@@@ -86,8 +86,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.video/release.json b/dist/openvibe.video/release.json
iindex abcb23b..19ec9c2 100644
---- a/dist/openvibe.video/release.json
++++ b/dist/openvibe.video/release.json
@@@ -1,11 +1,11 @@
{
"service": "video",
-- "release": "b547f16aa0e6",
-- "released_at": "2026-09-28T00:00:00.000Z",
++ "release": "69eb8d3a8ed1",
++ "released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.23.0"
++ "openvibe-shared": "1.28.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.video/sitemap.xml b/dist/openvibe.video/sitemap.xml
iindex 9afda65..95cf994 100644
---- a/dist/openvibe.video/sitemap.xml
++++ b/dist/openvibe.video/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.video/</loc><lastmod>2026-09-28</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.video/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.video/status.json b/dist/openvibe.video/status.json
iindex 2272ab4..abe090b 100644
---- a/dist/openvibe.video/status.json
++++ b/dist/openvibe.video/status.json
@@@ -11,6 +11,6 @@
"launchWaitsFor": "the video service on OpenVibe.Media",
"factsAsOf": "2026-09-28",
"network": "https://openvibe.network",
-- "updated": "2026-09-28",
++ "updated": "2026-09-29",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.video/terms.html b/dist/openvibe.video/terms.html
iindex a69854f..f0c2f4b 100644
---- a/dist/openvibe.video/terms.html
++++ b/dist/openvibe.video/terms.html
@@@ -85,8 +85,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.vip/dmca.html b/dist/openvibe.vip/dmca.html
iindex 2def9b3..9e35519 100644
---- a/dist/openvibe.vip/dmca.html
++++ b/dist/openvibe.vip/dmca.html
@@@ -81,8 +81,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.vip/index.html b/dist/openvibe.vip/index.html
iindex db58cc7..0265515 100644
---- a/dist/openvibe.vip/index.html
++++ b/dist/openvibe.vip/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.VIP — Memberships, network-wide.">
<meta name="twitter:description" content="OpenVibe.VIP is the membership layer of the OpenVibe network: creator memberships, channel subscriptions, VIP tiers and perks that unlock across Live, Community, Blog and more.">
<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.vip/#site","url":"https://openvibe.vip/","name":"OpenVibe.VIP","description":"OpenVibe.VIP is the membership layer of the OpenVibe network: creator memberships, channel subscriptions, VIP tiers and perks that unlock across Live, Community, Blog and more.","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.vip/#page","url":"https://openvibe.vip/","name":"OpenVibe.VIP — Memberships, network-wide.","description":"OpenVibe.VIP is the membership layer of the OpenVibe network: creator memberships, channel subscriptions, VIP tiers and perks that unlock across Live, Community, Blog and more.","isPartOf":{"@id":"https://openvibe.vip/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-28","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.VIP","item":"https://openvibe.vip/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.vip/#site","url":"https://openvibe.vip/","name":"OpenVibe.VIP","description":"OpenVibe.VIP is the membership layer of the OpenVibe network: creator memberships, channel subscriptions, VIP tiers and perks that unlock across Live, Community, Blog and more.","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.vip/#page","url":"https://openvibe.vip/","name":"OpenVibe.VIP — Memberships, network-wide.","description":"OpenVibe.VIP is the membership layer of the OpenVibe network: creator memberships, channel subscriptions, VIP tiers and perks that unlock across Live, Community, Blog and more.","isPartOf":{"@id":"https://openvibe.vip/#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.VIP","item":"https://openvibe.vip/"}]}}]}</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=d9b9af081efe" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -230,8 +230,8 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
@@@ -273,9 +273,9 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</span>
</div>
</div></footer>
--<script src="/shared/ov-mark.js?v=96079ebf2943" async></script>
--<script src="/shared/navbar.js?v=b50d9f47fc34"></script>
--<script src="/shared/footer.js?v=b99e512398d5"></script>
++<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
++<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
if (window.OpenVibeNavbar) { try { OpenVibeNavbar.init({ service: 'vip', apiBase: 'https://openvibe.network', links: [{ label: 'What it will be', href: '#what' }, { label: 'The network', href: 'https://openvibe.network/#network', external: false }], history: { type: 'page', title: 'OpenVibe.VIP' } }); } catch (e) {} }
ddiff --git a/dist/openvibe.vip/privacy.html b/dist/openvibe.vip/privacy.html
iindex a672481..87de69a 100644
---- a/dist/openvibe.vip/privacy.html
++++ b/dist/openvibe.vip/privacy.html
@@@ -86,8 +86,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.vip/release.json b/dist/openvibe.vip/release.json
iindex 5f50595..180a259 100644
---- a/dist/openvibe.vip/release.json
++++ b/dist/openvibe.vip/release.json
@@@ -1,11 +1,11 @@
{
"service": "vip",
-- "release": "88887e8a3fe3",
-- "released_at": "2026-09-28T00:00:00.000Z",
++ "release": "8f5cbc6a3bd7",
++ "released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.23.0"
++ "openvibe-shared": "1.28.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.vip/sitemap.xml b/dist/openvibe.vip/sitemap.xml
iindex d3e32df..1440620 100644
---- a/dist/openvibe.vip/sitemap.xml
++++ b/dist/openvibe.vip/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.vip/</loc><lastmod>2026-09-28</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.vip/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.vip/status.json b/dist/openvibe.vip/status.json
iindex 2d6684c..53ba53b 100644
---- a/dist/openvibe.vip/status.json
++++ b/dist/openvibe.vip/status.json
@@@ -18,6 +18,6 @@
"launchWaitsFor": "the payments cutover to OpenVibe.Billing; checkout stays closed until then",
"factsAsOf": "2026-09-28",
"network": "https://openvibe.network",
-- "updated": "2026-09-28",
++ "updated": "2026-09-29",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.vip/terms.html b/dist/openvibe.vip/terms.html
iindex 2ebd711..e4d6f9d 100644
---- a/dist/openvibe.vip/terms.html
++++ b/dist/openvibe.vip/terms.html
@@@ -86,8 +86,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.watch/dmca.html b/dist/openvibe.watch/dmca.html
iindex 8f18690..4ef7c74 100644
---- a/dist/openvibe.watch/dmca.html
++++ b/dist/openvibe.watch/dmca.html
@@@ -80,8 +80,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.watch/index.html b/dist/openvibe.watch/index.html
iindex 09cfb07..b2f6bba 100644
---- a/dist/openvibe.watch/index.html
++++ b/dist/openvibe.watch/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Watch — Watch anything. Hear about what matters.">
<meta name="twitter:description" content="OpenVibe.Watch will watch web pages, feeds, APIs, prices and stock, Git releases, OpenVibe activity, videos, livestreams and your own cameras, pull out what changed or what matters, and tell you, your apps or your AI agents. Checks respect site terms and robots rules, heavy work runs on shared workers, and cameras are read by a small agent on your own network so nothing is exposed to the internet.">
<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.watch/#site","url":"https://openvibe.watch/","name":"OpenVibe.Watch","description":"OpenVibe.Watch will watch web pages, feeds, APIs, prices and stock, Git releases, OpenVibe activity, videos, livestreams and your own cameras, pull out what changed or what matters, and tell you, your apps or your AI agents. Checks respect site terms and robots rules, heavy work runs on shared workers, and cameras are read by a small agent on your own network so nothing is exposed to the internet.","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.watch/#page","url":"https://openvibe.watch/","name":"OpenVibe.Watch — Watch anything. Hear about what matters.","description":"OpenVibe.Watch will watch web pages, feeds, APIs, prices and stock, Git releases, OpenVibe activity, videos, livestreams and your own cameras, pull out what changed or what matters, and tell you, your apps or your AI agents. Checks respect site terms and robots rules, heavy work runs on shared workers, and cameras are read by a small agent on your own network so nothing is exposed to the internet.","isPartOf":{"@id":"https://openvibe.watch/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-28","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Watch","item":"https://openvibe.watch/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.watch/#site","url":"https://openvibe.watch/","name":"OpenVibe.Watch","description":"OpenVibe.Watch will watch web pages, feeds, APIs, prices and stock, Git releases, OpenVibe activity, videos, livestreams and your own cameras, pull out what changed or what matters, and tell you, your apps or your AI agents. Checks respect site terms and robots rules, heavy work runs on shared workers, and cameras are read by a small agent on your own network so nothing is exposed to the internet.","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.watch/#page","url":"https://openvibe.watch/","name":"OpenVibe.Watch — Watch anything. Hear about what matters.","description":"OpenVibe.Watch will watch web pages, feeds, APIs, prices and stock, Git releases, OpenVibe activity, videos, livestreams and your own cameras, pull out what changed or what matters, and tell you, your apps or your AI agents. Checks respect site terms and robots rules, heavy work runs on shared workers, and cameras are read by a small agent on your own network so nothing is exposed to the internet.","isPartOf":{"@id":"https://openvibe.watch/#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.Watch","item":"https://openvibe.watch/"}]}}]}</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=d9b9af081efe" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -231,8 +231,8 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
@@@ -274,9 +274,9 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</span>
</div>
</div></footer>
--<script src="/shared/ov-mark.js?v=96079ebf2943" async></script>
--<script src="/shared/navbar.js?v=b50d9f47fc34"></script>
--<script src="/shared/footer.js?v=b99e512398d5"></script>
++<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
++<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
if (window.OpenVibeNavbar) { try { OpenVibeNavbar.init({ service: 'watch', apiBase: 'https://openvibe.network', links: [{ label: 'What it will be', href: '#what' }, { label: 'The network', href: 'https://openvibe.network/#network', external: false }], history: { type: 'page', title: 'OpenVibe.Watch' } }); } catch (e) {} }
ddiff --git a/dist/openvibe.watch/privacy.html b/dist/openvibe.watch/privacy.html
iindex 967ba59..6c5f8d1 100644
---- a/dist/openvibe.watch/privacy.html
++++ b/dist/openvibe.watch/privacy.html
@@@ -86,8 +86,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.watch/release.json b/dist/openvibe.watch/release.json
iindex f44e49d..5291b88 100644
---- a/dist/openvibe.watch/release.json
++++ b/dist/openvibe.watch/release.json
@@@ -1,11 +1,11 @@
{
"service": "watch",
-- "release": "3bc5f26d3a54",
-- "released_at": "2026-09-28T00:00:00.000Z",
++ "release": "20aeb8ca25be",
++ "released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.23.0"
++ "openvibe-shared": "1.28.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.watch/sitemap.xml b/dist/openvibe.watch/sitemap.xml
iindex 95ef883..962f6d0 100644
---- a/dist/openvibe.watch/sitemap.xml
++++ b/dist/openvibe.watch/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.watch/</loc><lastmod>2026-09-28</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.watch/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.watch/status.json b/dist/openvibe.watch/status.json
iindex 2dc6712..8ee2dd0 100644
---- a/dist/openvibe.watch/status.json
++++ b/dist/openvibe.watch/status.json
@@@ -11,6 +11,6 @@
"launchWaitsFor": "the watch service on the shared queue and workers",
"factsAsOf": "2026-09-28",
"network": "https://openvibe.network",
-- "updated": "2026-09-28",
++ "updated": "2026-09-29",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.watch/terms.html b/dist/openvibe.watch/terms.html
iindex 2dcd93c..da36500 100644
---- a/dist/openvibe.watch/terms.html
++++ b/dist/openvibe.watch/terms.html
@@@ -85,8 +85,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.website/dmca.html b/dist/openvibe.website/dmca.html
iindex af49cf2..915f892 100644
---- a/dist/openvibe.website/dmca.html
++++ b/dist/openvibe.website/dmca.html
@@@ -80,8 +80,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.website/index.html b/dist/openvibe.website/index.html
iindex f6973dd..63199aa 100644
---- a/dist/openvibe.website/index.html
++++ b/dist/openvibe.website/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Website — Websites that work, not just pages.">
<meta name="twitter:description" content="OpenVibe.Website will be an AI-assisted website and small-app builder with a real file tree: generate a site from a description, import one or fork a Git repository, edit HTML, CSS, JavaScript or Markdown by hand or visually, and publish to yourname.openvibe.website or your own domain. Sites can sign people in with OpenVibe, take bookings and forms, show media, run a blog or docs, and add chat, comments, memberships or support, with good SEO built in.">
<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.website/#site","url":"https://openvibe.website/","name":"OpenVibe.Website","description":"OpenVibe.Website will be an AI-assisted website and small-app builder with a real file tree: generate a site from a description, import one or fork a Git repository, edit HTML, CSS, JavaScript or Markdown by hand or visually, and publish to yourname.openvibe.website or your own domain. Sites can sign people in with OpenVibe, take bookings and forms, show media, run a blog or docs, and add chat, comments, memberships or support, with good SEO built in.","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.website/#page","url":"https://openvibe.website/","name":"OpenVibe.Website — Websites that work, not just pages.","description":"OpenVibe.Website will be an AI-assisted website and small-app builder with a real file tree: generate a site from a description, import one or fork a Git repository, edit HTML, CSS, JavaScript or Markdown by hand or visually, and publish to yourname.openvibe.website or your own domain. Sites can sign people in with OpenVibe, take bookings and forms, show media, run a blog or docs, and add chat, comments, memberships or support, with good SEO built in.","isPartOf":{"@id":"https://openvibe.website/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-28","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Website","item":"https://openvibe.website/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.website/#site","url":"https://openvibe.website/","name":"OpenVibe.Website","description":"OpenVibe.Website will be an AI-assisted website and small-app builder with a real file tree: generate a site from a description, import one or fork a Git repository, edit HTML, CSS, JavaScript or Markdown by hand or visually, and publish to yourname.openvibe.website or your own domain. Sites can sign people in with OpenVibe, take bookings and forms, show media, run a blog or docs, and add chat, comments, memberships or support, with good SEO built in.","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.website/#page","url":"https://openvibe.website/","name":"OpenVibe.Website — Websites that work, not just pages.","description":"OpenVibe.Website will be an AI-assisted website and small-app builder with a real file tree: generate a site from a description, import one or fork a Git repository, edit HTML, CSS, JavaScript or Markdown by hand or visually, and publish to yourname.openvibe.website or your own domain. Sites can sign people in with OpenVibe, take bookings and forms, show media, run a blog or docs, and add chat, comments, memberships or support, with good SEO built in.","isPartOf":{"@id":"https://openvibe.website/#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.Website","item":"https://openvibe.website/"}]}}]}</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=d9b9af081efe" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -231,8 +231,8 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
@@@ -274,9 +274,9 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</span>
</div>
</div></footer>
--<script src="/shared/ov-mark.js?v=96079ebf2943" async></script>
--<script src="/shared/navbar.js?v=b50d9f47fc34"></script>
--<script src="/shared/footer.js?v=b99e512398d5"></script>
++<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
++<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
if (window.OpenVibeNavbar) { try { OpenVibeNavbar.init({ service: 'website', apiBase: 'https://openvibe.network', links: [{ label: 'What it will be', href: '#what' }, { label: 'The network', href: 'https://openvibe.network/#network', external: false }], history: { type: 'page', title: 'OpenVibe.Website' } }); } catch (e) {} }
ddiff --git a/dist/openvibe.website/privacy.html b/dist/openvibe.website/privacy.html
iindex 57e6b88..f2ba8bf 100644
---- a/dist/openvibe.website/privacy.html
++++ b/dist/openvibe.website/privacy.html
@@@ -86,8 +86,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/openvibe.website/release.json b/dist/openvibe.website/release.json
iindex 4648aa9..a8546c3 100644
---- a/dist/openvibe.website/release.json
++++ b/dist/openvibe.website/release.json
@@@ -1,11 +1,11 @@
{
"service": "website",
-- "release": "0dce3224e9b2",
-- "released_at": "2026-09-28T00:00:00.000Z",
++ "release": "5bbfc4a48646",
++ "released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.23.0"
++ "openvibe-shared": "1.28.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.website/sitemap.xml b/dist/openvibe.website/sitemap.xml
iindex d19c6b2..197b35a 100644
---- a/dist/openvibe.website/sitemap.xml
++++ b/dist/openvibe.website/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.website/</loc><lastmod>2026-09-28</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.website/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.website/status.json b/dist/openvibe.website/status.json
iindex b15d7a9..8405c16 100644
---- a/dist/openvibe.website/status.json
++++ b/dist/openvibe.website/status.json
@@@ -11,6 +11,6 @@
"launchWaitsFor": "tenant hosting on OpenVibe.Host (built, not launched) and the editor",
"factsAsOf": "2026-09-28",
"network": "https://openvibe.network",
-- "updated": "2026-09-28",
++ "updated": "2026-09-29",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.website/terms.html b/dist/openvibe.website/terms.html
iindex 73b4f0a..1c02158 100644
---- a/dist/openvibe.website/terms.html
++++ b/dist/openvibe.website/terms.html
@@@ -85,8 +85,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/realtime.openvibe.network/dmca.html b/dist/realtime.openvibe.network/dmca.html
iindex c98e99f..d0ff991 100644
---- a/dist/realtime.openvibe.network/dmca.html
++++ b/dist/realtime.openvibe.network/dmca.html
@@@ -80,8 +80,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/realtime.openvibe.network/index.html b/dist/realtime.openvibe.network/index.html
iindex 7940e17..807eaab 100644
---- a/dist/realtime.openvibe.network/index.html
++++ b/dist/realtime.openvibe.network/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="realtime.openvibe.network — Closed: realtime delivery is part of OpenVibe.Events.">
<meta name="twitter:description" content="OpenVibe.Realtime was planned as a separate service for live updates in the browser. Decision record ADR-005 (accepted 2026-09-22) closed it: browser realtime is part of OpenVibe.Events, as server-sent events with cursor resume at events.openvibe.network/realtime/stream. This address serves only this notice.">
<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://realtime.openvibe.network/#site","url":"https://realtime.openvibe.network/","name":"realtime.openvibe.network","description":"OpenVibe.Realtime was planned as a separate service for live updates in the browser. Decision record ADR-005 (accepted 2026-09-22) closed it: browser realtime is part of OpenVibe.Events, as server-sent events with cursor resume at events.openvibe.network/realtime/stream. This address serves only this notice.","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://realtime.openvibe.network/#page","url":"https://realtime.openvibe.network/","name":"realtime.openvibe.network — Closed: realtime delivery is part of OpenVibe.Events.","description":"OpenVibe.Realtime was planned as a separate service for live updates in the browser. Decision record ADR-005 (accepted 2026-09-22) closed it: browser realtime is part of OpenVibe.Events, as server-sent events with cursor resume at events.openvibe.network/realtime/stream. This address serves only this notice.","isPartOf":{"@id":"https://realtime.openvibe.network/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-28","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"realtime.openvibe.network","item":"https://realtime.openvibe.network/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://realtime.openvibe.network/#site","url":"https://realtime.openvibe.network/","name":"realtime.openvibe.network","description":"OpenVibe.Realtime was planned as a separate service for live updates in the browser. Decision record ADR-005 (accepted 2026-09-22) closed it: browser realtime is part of OpenVibe.Events, as server-sent events with cursor resume at events.openvibe.network/realtime/stream. This address serves only this notice.","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://realtime.openvibe.network/#page","url":"https://realtime.openvibe.network/","name":"realtime.openvibe.network — Closed: realtime delivery is part of OpenVibe.Events.","description":"OpenVibe.Realtime was planned as a separate service for live updates in the browser. Decision record ADR-005 (accepted 2026-09-22) closed it: browser realtime is part of OpenVibe.Events, as server-sent events with cursor resume at events.openvibe.network/realtime/stream. This address serves only this notice.","isPartOf":{"@id":"https://realtime.openvibe.network/#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":"realtime.openvibe.network","item":"https://realtime.openvibe.network/"}]}}]}</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=d9b9af081efe" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -221,8 +221,8 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
@@@ -264,9 +264,9 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</span>
</div>
</div></footer>
--<script src="/shared/ov-mark.js?v=96079ebf2943" async></script>
--<script src="/shared/navbar.js?v=b50d9f47fc34"></script>
--<script src="/shared/footer.js?v=b99e512398d5"></script>
++<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
++<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
if (window.OpenVibeNavbar) { try { OpenVibeNavbar.init({ service: 'realtime', apiBase: 'https://openvibe.network', links: [{ label: 'Where to go', href: '#what' }, { label: 'The network', href: 'https://openvibe.network/#network', external: false }], history: { type: 'page', title: 'realtime.openvibe.network' } }); } catch (e) {} }
ddiff --git a/dist/realtime.openvibe.network/privacy.html b/dist/realtime.openvibe.network/privacy.html
iindex 6be3c17..3ad09eb 100644
---- a/dist/realtime.openvibe.network/privacy.html
++++ b/dist/realtime.openvibe.network/privacy.html
@@@ -86,8 +86,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/realtime.openvibe.network/release.json b/dist/realtime.openvibe.network/release.json
iindex 9d54d71..9a83f87 100644
---- a/dist/realtime.openvibe.network/release.json
++++ b/dist/realtime.openvibe.network/release.json
@@@ -1,11 +1,11 @@
{
"service": "realtime",
-- "release": "8f253ede03be",
-- "released_at": "2026-09-28T00:00:00.000Z",
++ "release": "8678e34297ad",
++ "released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.23.0"
++ "openvibe-shared": "1.28.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/realtime.openvibe.network/status.json b/dist/realtime.openvibe.network/status.json
iindex 101ba22..c08492b 100644
---- a/dist/realtime.openvibe.network/status.json
++++ b/dist/realtime.openvibe.network/status.json
@@@ -18,6 +18,6 @@
"launchWaitsFor": null,
"factsAsOf": "2026-09-28",
"network": "https://openvibe.network",
-- "updated": "2026-09-28",
++ "updated": "2026-09-29",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/realtime.openvibe.network/terms.html b/dist/realtime.openvibe.network/terms.html
iindex fe7d41b..ac4c781 100644
---- a/dist/realtime.openvibe.network/terms.html
++++ b/dist/realtime.openvibe.network/terms.html
@@@ -85,8 +85,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/status.openvibe.network/dmca.html b/dist/status.openvibe.network/dmca.html
iindex fb10805..96fe453 100644
---- a/dist/status.openvibe.network/dmca.html
++++ b/dist/status.openvibe.network/dmca.html
@@@ -80,8 +80,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/status.openvibe.network/index.html b/dist/status.openvibe.network/index.html
iindex c7fc095..859cfb3 100644
---- a/dist/status.openvibe.network/index.html
++++ b/dist/status.openvibe.network/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="status.openvibe.network — Is OpenVibe up?">
<meta name="twitter:description" content="OpenVibe.Network checks every OpenVibe service about once a minute (its readiness endpoint and the release it runs) and publishes what it saw at openvibe.network/status. This address points there.">
<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://status.openvibe.network/#site","url":"https://status.openvibe.network/","name":"status.openvibe.network","description":"OpenVibe.Network checks every OpenVibe service about once a minute (its readiness endpoint and the release it runs) and publishes what it saw at openvibe.network/status. This address points there.","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://status.openvibe.network/#page","url":"https://status.openvibe.network/","name":"status.openvibe.network — Is OpenVibe up?","description":"OpenVibe.Network checks every OpenVibe service about once a minute (its readiness endpoint and the release it runs) and publishes what it saw at openvibe.network/status. This address points there.","isPartOf":{"@id":"https://status.openvibe.network/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-28","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"status.openvibe.network","item":"https://status.openvibe.network/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://status.openvibe.network/#site","url":"https://status.openvibe.network/","name":"status.openvibe.network","description":"OpenVibe.Network checks every OpenVibe service about once a minute (its readiness endpoint and the release it runs) and publishes what it saw at openvibe.network/status. This address points there.","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://status.openvibe.network/#page","url":"https://status.openvibe.network/","name":"status.openvibe.network — Is OpenVibe up?","description":"OpenVibe.Network checks every OpenVibe service about once a minute (its readiness endpoint and the release it runs) and publishes what it saw at openvibe.network/status. This address points there.","isPartOf":{"@id":"https://status.openvibe.network/#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":"status.openvibe.network","item":"https://status.openvibe.network/"}]}}]}</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=d9b9af081efe" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -261,8 +261,8 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
@@@ -304,9 +304,9 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</span>
</div>
</div></footer>
--<script src="/shared/ov-mark.js?v=96079ebf2943" async></script>
--<script src="/shared/navbar.js?v=b50d9f47fc34"></script>
--<script src="/shared/footer.js?v=b99e512398d5"></script>
++<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
++<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
if (window.OpenVibeNavbar) { try { OpenVibeNavbar.init({ service: 'status', apiBase: 'https://openvibe.network', links: [{ label: 'Where to go', href: '#what' }, { label: 'The network', href: 'https://openvibe.network/#network', external: false }], history: { type: 'page', title: 'status.openvibe.network' } }); } catch (e) {} }
ddiff --git a/dist/status.openvibe.network/privacy.html b/dist/status.openvibe.network/privacy.html
iindex d2eb45e..efc9079 100644
---- a/dist/status.openvibe.network/privacy.html
++++ b/dist/status.openvibe.network/privacy.html
@@@ -86,8 +86,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/status.openvibe.network/release.json b/dist/status.openvibe.network/release.json
iindex 7823b5a..39cbc4b 100644
---- a/dist/status.openvibe.network/release.json
++++ b/dist/status.openvibe.network/release.json
@@@ -1,11 +1,11 @@
{
"service": "status",
-- "release": "b83d71b0bd52",
-- "released_at": "2026-09-28T00:00:00.000Z",
++ "release": "37a25288e170",
++ "released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.23.0"
++ "openvibe-shared": "1.28.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/status.openvibe.network/status.json b/dist/status.openvibe.network/status.json
iindex d2ed31e..07ba885 100644
---- a/dist/status.openvibe.network/status.json
++++ b/dist/status.openvibe.network/status.json
@@@ -18,6 +18,6 @@
"launchWaitsFor": null,
"factsAsOf": "2026-09-28",
"network": "https://openvibe.network",
-- "updated": "2026-09-28",
++ "updated": "2026-09-29",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/status.openvibe.network/terms.html b/dist/status.openvibe.network/terms.html
iindex 59d0d80..228fc59 100644
---- a/dist/status.openvibe.network/terms.html
++++ b/dist/status.openvibe.network/terms.html
@@@ -85,8 +85,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/themes.openvibe.network/dmca.html b/dist/themes.openvibe.network/dmca.html
iindex a9ce1f7..c6ab4aa 100644
---- a/dist/themes.openvibe.network/dmca.html
++++ b/dist/themes.openvibe.network/dmca.html
@@@ -80,8 +80,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/themes.openvibe.network/index.html b/dist/themes.openvibe.network/index.html
iindex df90dc0..25d2e9c 100644
---- a/dist/themes.openvibe.network/index.html
++++ b/dist/themes.openvibe.network/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="themes.openvibe.network — Your look, on every site.">
<meta name="twitter:description" content="themes.openvibe.network will be the theme catalog and API: built-in and community themes, previews, per-site overrides, import/export and the shared design tokens every OpenVibe site renders.">
<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://themes.openvibe.network/#site","url":"https://themes.openvibe.network/","name":"themes.openvibe.network","description":"themes.openvibe.network will be the theme catalog and API: built-in and community themes, previews, per-site overrides, import/export and the shared design tokens every OpenVibe site renders.","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://themes.openvibe.network/#page","url":"https://themes.openvibe.network/","name":"themes.openvibe.network — Your look, on every site.","description":"themes.openvibe.network will be the theme catalog and API: built-in and community themes, previews, per-site overrides, import/export and the shared design tokens every OpenVibe site renders.","isPartOf":{"@id":"https://themes.openvibe.network/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-28","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"themes.openvibe.network","item":"https://themes.openvibe.network/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://themes.openvibe.network/#site","url":"https://themes.openvibe.network/","name":"themes.openvibe.network","description":"themes.openvibe.network will be the theme catalog and API: built-in and community themes, previews, per-site overrides, import/export and the shared design tokens every OpenVibe site renders.","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://themes.openvibe.network/#page","url":"https://themes.openvibe.network/","name":"themes.openvibe.network — Your look, on every site.","description":"themes.openvibe.network will be the theme catalog and API: built-in and community themes, previews, per-site overrides, import/export and the shared design tokens every OpenVibe site renders.","isPartOf":{"@id":"https://themes.openvibe.network/#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":"themes.openvibe.network","item":"https://themes.openvibe.network/"}]}}]}</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=d9b9af081efe" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -230,8 +230,8 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
@@@ -273,9 +273,9 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</span>
</div>
</div></footer>
--<script src="/shared/ov-mark.js?v=96079ebf2943" async></script>
--<script src="/shared/navbar.js?v=b50d9f47fc34"></script>
--<script src="/shared/footer.js?v=b99e512398d5"></script>
++<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
++<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
if (window.OpenVibeNavbar) { try { OpenVibeNavbar.init({ service: 'themes', apiBase: 'https://openvibe.network', links: [{ label: 'What it will be', href: '#what' }, { label: 'The network', href: 'https://openvibe.network/#network', external: false }], history: { type: 'page', title: 'themes.openvibe.network' } }); } catch (e) {} }
ddiff --git a/dist/themes.openvibe.network/privacy.html b/dist/themes.openvibe.network/privacy.html
iindex d7b0d19..2984239 100644
---- a/dist/themes.openvibe.network/privacy.html
++++ b/dist/themes.openvibe.network/privacy.html
@@@ -86,8 +86,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/dist/themes.openvibe.network/release.json b/dist/themes.openvibe.network/release.json
iindex 7a386d4..cdac91a 100644
---- a/dist/themes.openvibe.network/release.json
++++ b/dist/themes.openvibe.network/release.json
@@@ -1,11 +1,11 @@
{
"service": "themes",
-- "release": "8967b9274391",
-- "released_at": "2026-09-28T00:00:00.000Z",
++ "release": "658fd6c2f8c6",
++ "released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.23.0"
++ "openvibe-shared": "1.28.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/themes.openvibe.network/sitemap.xml b/dist/themes.openvibe.network/sitemap.xml
iindex d10d1a1..b78d297 100644
---- a/dist/themes.openvibe.network/sitemap.xml
++++ b/dist/themes.openvibe.network/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://themes.openvibe.network/</loc><lastmod>2026-09-28</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://themes.openvibe.network/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/themes.openvibe.network/status.json b/dist/themes.openvibe.network/status.json
iindex de17593..bef9966 100644
---- a/dist/themes.openvibe.network/status.json
++++ b/dist/themes.openvibe.network/status.json
@@@ -18,6 +18,6 @@
"launchWaitsFor": null,
"factsAsOf": "2026-09-28",
"network": "https://openvibe.network",
-- "updated": "2026-09-28",
++ "updated": "2026-09-29",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/themes.openvibe.network/terms.html b/dist/themes.openvibe.network/terms.html
iindex 820ea79..0b47c92 100644
---- a/dist/themes.openvibe.network/terms.html
++++ b/dist/themes.openvibe.network/terms.html
@@@ -85,8 +85,8 @@
.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
@media (max-width:560px){
-- .ovf{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
-- .ovf[data-variant="compact"]{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}
++ .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
++ .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
.ovf-cols{gap:22px 16px}
.ovf-bar{justify-content:center;text-align:center;padding-inline:0}
.ovf-legal-inline{justify-content:center}
ddiff --git a/package-lock.json b/package-lock.json
iindex fa85dfe..13be435 100644
---- a/package-lock.json
++++ b/package-lock.json
@@@ -6,7 +6,7 @@
"": {
"name": "openvibe-sites",
"dependencies": {
-- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.23.0"
++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.28.1"
},
"engines": {
"node": ">=20"
@@@ -119,9 +119,9 @@
"license": "MIT"
},
"node_modules/openvibe-shared": {
-- "version": "1.23.0",
-- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.23.0",
-- "integrity": "sha512-9B3vXn5P7JjHWrp3cNh7ZynLOmCUgw9cuz6moksU3fyuIfy7uoepa2wJmQeSyLoPU8q/zKRJVeBVzPfdhr0z3g==",
++ "version": "1.28.1",
++ "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.28.1",
++ "integrity": "sha512-AV39sRi9hm8QETRLM1c6q7nrU8XWPUZzCxZP+h7Cho+LsJ47szHtMk3YdCQHT8+aSC5Hpu68EU8sCvbagR+a0g==",
"license": "MIT",
"dependencies": {
"jsonwebtoken": "^9.0.0"
ddiff --git a/package.json b/package.json
iindex d9b752f..1f71140 100644
---- a/package.json
++++ b/package.json
@@@ -7,7 +7,7 @@
"test": "node test/build.test.js && node test/deploy-wrapper.test.js"
},
"dependencies": {
-- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.23.0"
++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.28.1"
},
"engines": {
"node": ">=20"