openvibers/openvibe.live Commits

Home hero board: fold rewards into Points Spent (7-up rows), hide empty board, mobile label room

OP OpenVibers committed 27 Aug 2026 · 1a56346548 · 4 files, +9 −7

Co-Authored-By: Claude Fable 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_017AyeSFu7qdLdR64Zv99QNm

Changes

ddiff --git a/public/css/style.css b/public/css/style.css
iindex fbc0e956..4ff63a63 100644
---- a/public/css/style.css
++++ b/public/css/style.css
@@@ -2213,7 +2213,8 @@ body.egg-rainbow { animation: eggRainbow 2.6s linear; }
.hero-stat-kicker i { color: var(--accent); font-size: 0.8rem; opacity: 0.9; }
/* auto-fit: a row with fewer chips stretches them to the board edge instead of
leaving a ragged gap — every row reads as one full-width band. */
--.hero-stat-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); gap: 8px; }
++.hero-stat-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(126px, 1fr)); gap: 8px; }
++.hero-stats:empty { display: none; }
.hero-stat--spark { grid-column: span 2; flex-direction: column; align-items: stretch; gap: 3px; padding: 7px 12px 6px; color: var(--accent); }
.hero-stat--spark svg { display: block; width: 100%; height: 30px; opacity: 0.9; }
@@@ -2323,6 +2324,8 @@ a.pulse-card:hover { border-color: var(--accent); transform: translateY(-2px); }
.hero-stat-kicker { padding-left: 10px; border-left-width: 2px; }
.hero-stat-row { grid-template-columns: repeat(auto-fit, minmax(104px, 1fr)); gap: 6px; margin-left: 10px; }
.hero-stat { padding: 7px 9px; gap: 7px; }
++ .hero-stat > i { display: none; } /* icons cost the room labels need at 3-up */
++ .hero-stat-label { white-space: normal; line-height: 1.1; }
.hero-stat-num { font-size: 1.05rem; }
.hero-float { border-radius: 10px; }
}
ddiff --git a/public/index.html b/public/index.html
iindex c3e43da8..f32050b2 100644
---- a/public/index.html
++++ b/public/index.html
@@@ -62,7 +62,7 @@
</script>
<!-- Stylesheets -->
-- <link rel="stylesheet" href="/css/style.css?v=139">
++ <link rel="stylesheet" href="/css/style.css?v=140">
<link rel="stylesheet" href="/css/chat-shared.css?v=1">
<link rel="stylesheet" href="/css/broadcast.css?v=11">
<link rel="stylesheet" href="/css/cosmetics.css?v=2">
@@@ -5021,7 +5021,7 @@ curl -s https://openvibe.media/live/@Goosely/chat-insight.json | jq ".chat_insig
<!-- Scripts -->
<script src="/js/theme-engine.js?v=4"></script>
<script src="/live-notify.js?v=3" defer></script>
--<script src="/js/app.js?v=131" defer></script>
++<script src="/js/app.js?v=132" defer></script>
<script src="/js/stream-player.js?v=21" defer></script>
<script src="/js/stream-pip.js?v=1" defer></script>
<script src="/js/chat-shared.js?v=3" defer></script>
ddiff --git a/public/js/app.js b/public/js/app.js
iindex 478ffe13..b0760f0a 100644
---- a/public/js/app.js
++++ b/public/js/app.js
@@@ -1264,8 +1264,7 @@ function renderHeroStats(stats) {
{ icon: 'fa-cart-shopping', num: stats.vibesBought, label: 'Vibes Bought', title: 'Vibes purchased with real money (PowerChat, card, PayPal, crypto)', recent: R.vibesBought },
{ icon: 'fa-star', num: stats.activeSubs, label: 'Subs', title: 'Active channel subscriptions', recent: R.subs },
{ icon: 'fa-coins', num: stats.pointsEarned, label: 'Points Earned', title: 'Channel points earned by viewers (watching, chatting, following)', recent: R.points },
-- { icon: 'fa-gift', num: stats.pointsSpent, label: 'Points Spent', title: 'Channel points spent on rewards', recent: R.pointsSpent },
-- { icon: 'fa-ticket', num: stats.redemptions, label: 'Rewards', title: 'Channel reward redemptions', recent: R.redemptions },
++ { icon: 'fa-gift', num: stats.pointsSpent, label: 'Points Spent', title: `Channel points spent on rewards · ${_fmtCount(stats.redemptions || 0)} rewards redeemed`, recent: R.pointsSpent, sub: stats.redemptions ? `${_fmtCount(stats.redemptions)} rewards` : '' },
{ icon: 'fa-bullseye', num: stats.goalsActive, label: 'Goals', title: `Donation goals running now · ${stats.goalsReached || 0} reached so far`, sub: stats.goalsReached ? `${_fmtCount(stats.goalsReached)} reached` : '' },
],
});
ddiff --git a/public/popout-chat.html b/public/popout-chat.html
iindex 1f024fb7..060291bb 100644
---- a/public/popout-chat.html
++++ b/public/popout-chat.html
@@@ -7,7 +7,7 @@
<!-- Keep these in step with index.html — the popout renders the same chat
components (cosmetics.css positions particle effects; without it they sit
inline next to the username as "broken badges" until their cleanup timer). -->
-- <link rel="stylesheet" href="/css/style.css?v=139">
++ <link rel="stylesheet" href="/css/style.css?v=140">
<link rel="stylesheet" href="/css/chat-shared.css?v=1">
<link rel="stylesheet" href="/css/cosmetics.css?v=2">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
@@@ -226,7 +226,7 @@
<!-- Chat feature scripts — mirror index.html so the popout has full parity.
Order: dependencies (app/emotes/gif/uploads/coins/bucks/cosmetics) before chat.js. -->
-- <script src="/js/app.js?v=131"></script>
++ <script src="/js/app.js?v=132"></script>
<script src="/js/emotes.js?v=8"></script>
<script src="/js/gif-picker.js?v=1"></script>
<script src="/js/channel-uploads.js?v=12"></script>