openvibers/openvibe.live Commits

Setting up to go live on a phone keeps the app's bottom bar; only the live studio owns the screen (#495)

OP OpenVibers committed 12 days ago · 20f0963380 · 2 files, +15 −18

The owner, 2026-11-01 (a screenshot of the Phone Home Stream setup): "the buttons at the bottom don't show like our
mobile buttons". The bar (Home, Videos, Go Live, Chat, Rundown) stays on the broadcast page while setting up, with Go
Live lit; the live studio (body.bc-studio-on) still owns the whole screen. The Go live dock sits just above the bar,
the bar clears the phone's home indicator for it, and the page keeps room for both at its foot.

Changes

ddiff --git a/public/css/features/broadcast.css b/public/css/features/broadcast.css
iindex 5ab3f18a..6f4065d3 100644
---- a/public/css/features/broadcast.css
++++ b/public/css/features/broadcast.css
@@@ -2805,18 +2805,16 @@ body.bc-studio-on #bc-chat-messages .chat-conn-status { display: block !importan
.bcs-live-dot, .bcs-sheet, .bcs-sheet-wrap { animation: none; }
}
--/* The studio is a going-live screen, so on a phone it owns the screen (OpenVibe.Design "media-owns-the-screen";
-- owner 2026-10-31: the Go live button sat under the app's bottom bar). The bar steps aside on the broadcast page;
-- it comes back on every other page. */
--@media (max-width: 760px) {
-- html:has(#page-broadcast.active) { --ovnav-appbar-h: 0px; }
-- html:has(#page-broadcast.active) .ovnav-appbar { display: none; }
--}
++/* Setting up on a phone keeps the app's bottom bar, with Go Live lit, like every other page (the owner, 2026-11-01:
++ "the buttons at the bottom don't show like our mobile buttons"). Only the live studio (body.bc-studio-on, above)
++ owns the whole screen, as a camera app does. The Go live dock sits just above the bar. */
/* "Go live" in reach on a phone before going live (public/js/broadcast-studio.js): pinned while the slot's own Go Live
button is below the fold, and always above anything else at the bottom edge (--ovnav-appbar-h). */
.bcs-golive {
position: fixed; left: 0; right: 0; bottom: var(--ovnav-appbar-h, 0px); z-index: 1050; display: grid; gap: 4px; justify-items: center;
-- padding: 10px max(14px, env(safe-area-inset-right, 0px)) calc(10px + env(safe-area-inset-bottom, 0px)) max(14px, env(safe-area-inset-left, 0px));
++ padding: 10px max(14px, env(safe-area-inset-right, 0px)) 10px max(14px, env(safe-area-inset-left, 0px));
++ /* Over the bar, the bar already clears the phone's home indicator; alone at the edge, the dock does. */
++ padding-bottom: calc(10px + max(0px, env(safe-area-inset-bottom, 0px) - var(--ovnav-appbar-h, 0px)));
background: linear-gradient(to bottom, transparent, var(--bg-primary, #0b0b10) 34%);
}
.bcs-golive[hidden] { display: none; }
@@@ -2830,7 +2828,7 @@ body.bc-studio-on #bc-chat-messages .chat-conn-status { display: block !importan
.bcs-golive-where { color: var(--text-secondary, #a1a1aa); font-size: 0.76rem; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
body.bc-golive-dock-on .messenger-toggle { display: none !important; }
/* The page keeps room at its foot for the dock, so its last fields are never under it. */
--body.bc-golive-dock-on #page-broadcast { padding-bottom: calc(104px + env(safe-area-inset-bottom, 0px)); }
++body.bc-golive-dock-on #page-broadcast { padding-bottom: calc(104px + var(--ovnav-appbar-h, 0px) + env(safe-area-inset-bottom, 0px)); }
/* What viewers see, over the studio (bcStudio.showViewer): a phone stays on this tab. */
.bcs-viewer {
ddiff --git a/test/broadcast-golive-dock.test.js b/test/broadcast-golive-dock.test.js
iindex e4a3b0bc..6fe21801 100644
---- a/test/broadcast-golive-dock.test.js
++++ b/test/broadcast-golive-dock.test.js
@@@ -1,16 +1,15 @@
'use strict';
--// The studio is a going-live screen, so on a phone it owns the screen (owner, 2026-10-31: the "Go live" button sat under
--// the app's bottom bar). The app bar steps aside on the broadcast page, the Go live dock sits above whatever is at the
--// bottom edge, and the page keeps room at its foot so its last fields are never under the dock.
++// Setting up to go live on a phone keeps the app's bottom bar like every other page (the owner, 2026-11-01: "the buttons
++// at the bottom don't show like our mobile buttons"); only the live studio owns the whole screen. The Go live dock sits
++// above whatever is at the bottom edge, and the page keeps room at its foot for the dock and the bar.
const assert = require('assert');
const fs = require('fs');
const path = require('path');
const css = fs.readFileSync(path.join(__dirname, '..', 'public/css/features/broadcast.css'), 'utf8');
--const phone = css.slice(css.indexOf('@media (max-width: 760px) {\n html:has(#page-broadcast.active)'));
--assert.ok(phone.startsWith('@media (max-width: 760px)'), 'a phone rule');
--assert.match(phone, /html:has\(#page-broadcast\.active\) \{ --ovnav-appbar-h: 0px; \}/, 'no room kept for the bar');
--assert.match(phone, /html:has\(#page-broadcast\.active\) \.ovnav-appbar \{ display: none; \}/, 'the bar steps aside');
++assert.ok(!/html:has\(#page-broadcast\.active\) \.ovnav-appbar \{ display: none; \}/.test(css), 'the bar stays while setting up');
++assert.ok(!/html:has\(#page-broadcast\.active\) \{ --ovnav-appbar-h: 0px; \}/.test(css), 'and keeps its room');
++assert.match(css, /body\.bc-studio-on \.ovnav-appbar \{ display: none !important; \}/, 'the live studio still owns the screen');
assert.match(css, /\.bcs-golive \{\s*position: fixed; left: 0; right: 0; bottom: var\(--ovnav-appbar-h, 0px\);/, 'the dock sits above the bottom edge');
--assert.match(css, /body\.bc-golive-dock-on #page-broadcast \{ padding-bottom: calc\(104px \+ env\(safe-area-inset-bottom, 0px\)\); \}/, 'room for the dock');
--console.log('go live dock: the broadcast page owns a phone screen, and the dock never covers the bar or the last fields');
++assert.match(css, /body\.bc-golive-dock-on #page-broadcast \{ padding-bottom: calc\(104px \+ var\(--ovnav-appbar-h, 0px\) \+ env\(safe-area-inset-bottom, 0px\)\); \}/, 'room for the dock and the bar');
++console.log('go live dock: setting up keeps the app bar; the dock sits above it and never covers the last fields');