openvibers/openvibe.live Commits
Star of OpenVibe: compact by default; demote the two explainer sections after 18 visits
Changes
@@@ -244,7 +244,10 @@.star-card.is-compact .star-actions { margin-top: 0; }.star-card.is-compact .star-btn-watch { font-size: 0.86rem; padding: 8px 15px; }--/* The disclosure. Fades up as the card grows — see animateHeightChange(). */++/* The disclosure. Fades up as the card grows — see animateHeightChange().++ [hidden] is a UA rule, so any author `display` here silently beats it and the panel never++ actually hides. Stated explicitly, the same trap the hero strip fell into. */++.star-more[hidden] { display: none !important; }.star-more { display: block; }.star-more.is-entering { animation: starMoreIn 0.42s cubic-bezier(.2, 1, .3, 1); }@keyframes starMoreIn { from { opacity: 0; transform: translateY(-8px); } to { opacity: 1; transform: none; } }@@@ -91,7 +91,7 @@<link rel="stylesheet" href="/css/style.css?v=194"><link rel="stylesheet" href="/css/home-fx.css?v=13"><link rel="stylesheet" href="/css/home-tour.css?v=7">-- <link rel="stylesheet" href="/css/i18n-star.css?v=6">++ <link rel="stylesheet" href="/css/i18n-star.css?v=7"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"><link rel="stylesheet" href="/css/chat-shared.css?v=1" media="print" onload="this.media='all';this.onload=null"><link rel="stylesheet" href="/css/broadcast.css?v=11" media="print" onload="this.media='all';this.onload=null">@@@ -5131,7 +5131,7 @@ curl -s https://openvibe.media/live/@Goosely/chat-insight.json | jq ".chat_insig<script src="/live-notify.js?v=3" defer></script><script src="/js/ov-skeleton.js?v=1" defer></script><script src="/js/ov-odometer.js?v=3" defer></script>--<script src="/js/app.js?v=165" defer></script>++<script src="/js/app.js?v=166" defer></script><script src="/js/stream-player.js?v=22" defer></script><script src="/js/stream-pip.js?v=1" defer></script><script src="/js/chat-shared.js?v=3" defer></script>@@@ -2254,15 +2254,19 @@ function demoteHomeIntroSections() {const views = _homeIntroViews(true);if (views < HOME_INTRO_VIEWS_BEFORE_DEMOTING) return;const container = document.querySelector('#page-home .container');-- const anchorEl = document.getElementById('home-changelog-wrapper');-- if (!container || !anchorEl) return;++ if (!container) return;++ // Land them before the changelog if it is a sibling, otherwise at the end of the container.++ // Reading the anchor's parent rather than assuming it means a future markup change cannot++ // silently turn this into a no-op.++ const changelog = document.getElementById('home-changelog-wrapper');++ const anchorEl = changelog && changelog.parentElement === container ? changelog : null;for (const id of ['home-tour-mount', 'home-cta-banner']) {const el = document.getElementById(id);// Already moved (a re-render, or a second visit in the same session)? Leave it be.if (!el || el.dataset.ovDemoted) continue;el.dataset.ovDemoted = '1';el.classList.add('home-intro-demoted');-- try { container.insertBefore(el, anchorEl); } catch { /* */ }++ try { if (anchorEl) container.insertBefore(el, anchorEl); else container.appendChild(el); } catch { /* */ }}}
@@ -244,7 +244,10 @@
@@ -244,7 +244,10 @@
.star-card.is-compact .star-actions { margin-top: 0; }
.star-card.is-compact .star-actions { margin-top: 0; }
.star-card.is-compact .star-btn-watch { font-size: 0.86rem; padding: 8px 15px; }
.star-card.is-compact .star-btn-watch { font-size: 0.86rem; padding: 8px 15px; }
-/* The disclosure. Fades up as the card grows — see animateHeightChange(). */
+/* The disclosure. Fades up as the card grows — see animateHeightChange().
+ [hidden] is a UA rule, so any author `display` here silently beats it and the panel never
+ actually hides. Stated explicitly, the same trap the hero strip fell into. */
+.star-more[hidden] { display: none !important; }
.star-more { display: block; }
.star-more { display: block; }
.star-more.is-entering { animation: starMoreIn 0.42s cubic-bezier(.2, 1, .3, 1); }
.star-more.is-entering { animation: starMoreIn 0.42s cubic-bezier(.2, 1, .3, 1); }
@keyframes starMoreIn { from { opacity: 0; transform: translateY(-8px); } to { opacity: 1; transform: none; } }
@keyframes starMoreIn { from { opacity: 0; transform: translateY(-8px); } to { opacity: 1; transform: none; } }
@@ -91,7 +91,7 @@
@@ -91,7 +91,7 @@
<link rel="stylesheet" href="/css/style.css?v=194">
<link rel="stylesheet" href="/css/style.css?v=194">
<link rel="stylesheet" href="/css/home-fx.css?v=13">
<link rel="stylesheet" href="/css/home-fx.css?v=13">
<link rel="stylesheet" href="/css/home-tour.css?v=7">
<link rel="stylesheet" href="/css/home-tour.css?v=7">
- <link rel="stylesheet" href="/css/i18n-star.css?v=6">
+ <link rel="stylesheet" href="/css/i18n-star.css?v=7">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
<link rel="stylesheet" href="/css/chat-shared.css?v=1" media="print" onload="this.media='all';this.onload=null">
<link rel="stylesheet" href="/css/chat-shared.css?v=1" media="print" onload="this.media='all';this.onload=null">
<link rel="stylesheet" href="/css/broadcast.css?v=11" media="print" onload="this.media='all';this.onload=null">
<link rel="stylesheet" href="/css/broadcast.css?v=11" media="print" onload="this.media='all';this.onload=null">
@@ -5131,7 +5131,7 @@ curl -s https://openvibe.media/live/@Goosely/chat-insight.json | jq ".chat_insig
@@ -5131,7 +5131,7 @@ curl -s https://openvibe.media/live/@Goosely/chat-insight.json | jq ".chat_insig
<script src="/live-notify.js?v=3" defer></script>
<script src="/live-notify.js?v=3" defer></script>
<script src="/js/ov-skeleton.js?v=1" defer></script>
<script src="/js/ov-skeleton.js?v=1" defer></script>
<script src="/js/ov-odometer.js?v=3" defer></script>
<script src="/js/ov-odometer.js?v=3" defer></script>
-<script src="/js/app.js?v=165" defer></script>
+<script src="/js/app.js?v=166" defer></script>
<script src="/js/stream-player.js?v=22" defer></script>
<script src="/js/stream-player.js?v=22" defer></script>
<script src="/js/stream-pip.js?v=1" defer></script>
<script src="/js/stream-pip.js?v=1" defer></script>
<script src="/js/chat-shared.js?v=3" defer></script>
<script src="/js/chat-shared.js?v=3" defer></script>
@@ -2254,15 +2254,19 @@ function demoteHomeIntroSections() {
@@ -2254,15 +2254,19 @@ function demoteHomeIntroSections() {
const views = _homeIntroViews(true);
const views = _homeIntroViews(true);
if (views < HOME_INTRO_VIEWS_BEFORE_DEMOTING) return;
if (views < HOME_INTRO_VIEWS_BEFORE_DEMOTING) return;
const container = document.querySelector('#page-home .container');
const container = document.querySelector('#page-home .container');
- const anchorEl = document.getElementById('home-changelog-wrapper');
- if (!container || !anchorEl) return;
+ if (!container) return;
+ // Land them before the changelog if it is a sibling, otherwise at the end of the container.
+ // Reading the anchor's parent rather than assuming it means a future markup change cannot
+ // silently turn this into a no-op.
+ const changelog = document.getElementById('home-changelog-wrapper');
+ const anchorEl = changelog && changelog.parentElement === container ? changelog : null;
for (const id of ['home-tour-mount', 'home-cta-banner']) {
for (const id of ['home-tour-mount', 'home-cta-banner']) {
const el = document.getElementById(id);
const el = document.getElementById(id);
// Already moved (a re-render, or a second visit in the same session)? Leave it be.
// Already moved (a re-render, or a second visit in the same session)? Leave it be.
if (!el || el.dataset.ovDemoted) continue;
if (!el || el.dataset.ovDemoted) continue;
el.dataset.ovDemoted = '1';
el.dataset.ovDemoted = '1';
el.classList.add('home-intro-demoted');
el.classList.add('home-intro-demoted');
- try { container.insertBefore(el, anchorEl); } catch { /* */ }
+ try { if (anchorEl) container.insertBefore(el, anchorEl); else container.appendChild(el); } catch { /* */ }
}
}
}
}