openvibers/openvibe.live Commits

Reward words and relay badges read on light themes (#530)

OP OpenVibers committed 12 days ago · 0fc4065f8d · 3 files, +13 −8

Changes

ddiff --git a/public/css/features/dashboard.css b/public/css/features/dashboard.css
iindex 89a86369..f94b16d8 100644
---- a/public/css/features/dashboard.css
++++ b/public/css/features/dashboard.css
@@@ -275,7 +275,7 @@
gap: 6px;
}
--.coins-color { color: #b388ff !important; }
++.coins-color { color: color-mix(in srgb, #b388ff 55%, var(--text-primary)) !important; }
.dash-rewards-grid {
display: flex; flex-direction: column; gap: 8px;
}
ddiff --git a/public/css/style.css b/public/css/style.css
iindex e83ae015..52f3fe47 100644
---- a/public/css/style.css
++++ b/public/css/style.css
@@@ -2953,7 +2953,7 @@ a.pulse-card:hover { border-color: var(--accent); transform: translateY(-2px); }
/* VIP member badge (OpenVibe.VIP): a short text label, so it is a pill rather than an icon square. */
.chat-vip-badge { width: auto; padding: 0 5px; font-size: 0.62rem; font-weight: 700; letter-spacing: 0.02em; white-space: nowrap; color: var(--accent-light, var(--accent)); background: color-mix(in srgb, var(--accent) 22%, transparent); border-color: color-mix(in srgb, var(--accent) 50%, transparent); }
/* Relay platform badge — colour driven by --relay-color (per platform). */
--.chat-relay-badge { color: var(--relay-color, #888); background: color-mix(in srgb, var(--relay-color, #888) 20%, transparent); border-color: color-mix(in srgb, var(--relay-color, #888) 45%, transparent); }
++.chat-relay-badge { color: color-mix(in srgb, var(--relay-color, #888) 55%, var(--text-primary)); background: color-mix(in srgb, var(--relay-color, #888) 20%, transparent); border-color: color-mix(in srgb, var(--relay-color, #888) 45%, transparent); }
.chat-relay-badge i { font-size: 0.6rem; }
/* Animated tooltip (shared by any [data-tip] badge — chat, user list, context menu) */
@@@ -5162,7 +5162,7 @@ body.theme-light .btn-outline:hover {
padding: 4px 10px; border-radius: 12px;
background: linear-gradient(135deg, #1a0e2a, #0f0818);
border: 1px solid #6c3fb5;
-- color: #b388ff; font-size: 0.85rem; font-weight: 600;
++ color: color-mix(in srgb, #b388ff 55%, var(--text-primary)); font-size: 0.85rem; font-weight: 600;
cursor: pointer;
}
.nav-coins:hover { border-color: #9c6eff; }
@@@ -5172,7 +5172,7 @@ body.theme-light .btn-outline:hover {
flex-shrink: 0;
padding: 6px 8px; background: transparent;
border: 1px solid #6c3fb5; border-radius: var(--radius);
-- color: #b388ff; font-size: 0.85rem; cursor: pointer;
++ color: color-mix(in srgb, #b388ff 55%, var(--text-primary)); font-size: 0.85rem; cursor: pointer;
transition: color var(--ov-dur-2, 0.15s), border-color var(--ov-dur-2, 0.15s), background var(--ov-dur-2, 0.15s);
line-height: 1;
}
@@@ -5191,7 +5191,7 @@ body.theme-light .btn-outline:hover {
display: flex; justify-content: space-between; align-items: center;
padding: 8px 12px;
font-size: 0.85rem; font-weight: 600;
-- color: #b388ff;
++ color: color-mix(in srgb, #b388ff 55%, var(--text-primary));
border-bottom: 1px solid var(--border);
}
.rewards-coin-bal {
@@@ -5220,7 +5220,7 @@ body.theme-light .btn-outline:hover {
}
.reward-btn i {
font-size: 1.2rem;
-- color: var(--reward-color, #b388ff);
++ color: color-mix(in srgb, var(--reward-color, #b388ff) 60%, var(--text-primary));
}
.reward-title {
font-weight: 500; line-height: 1.2;
@@@ -5228,7 +5228,7 @@ body.theme-light .btn-outline:hover {
text-overflow: ellipsis; white-space: nowrap;
}
.reward-cost {
-- font-size: 0.7rem; color: #b388ff;
++ font-size: 0.7rem; color: color-mix(in srgb, #b388ff 55%, var(--text-primary));
font-weight: 600;
}
@@@ -5250,7 +5250,7 @@ body.theme-light .btn-outline:hover {
}
.dash-reward-icon {
font-size: 1.4rem;
-- color: var(--reward-color, #b388ff);
++ color: color-mix(in srgb, var(--reward-color, #b388ff) 60%, var(--text-primary));
width: 36px; text-align: center;
}
.dash-reward-info {
ddiff --git a/test/theme-tokens-defined.test.js b/test/theme-tokens-defined.test.js
iindex 173fde92..600b17b3 100644
---- a/test/theme-tokens-defined.test.js
++++ b/test/theme-tokens-defined.test.js
@@@ -45,4 +45,9 @@ assert.match(focus[1], /background: var\(--bg-input\)/);
// The channel's language chip mixes its gold with the theme's text instead of a pale fixed gold.
const channel = fs.readFileSync(path.join(root, 'css', 'features', 'channel.css'), 'utf8');
assert.match(channel, /\.ch-lang-chip \{[^}]*color: color-mix\(in srgb, #f59e0b 35%, var\(--text-primary\)\)/);
++// Violet reward words and platform-coloured relay badges are mixed with the theme's text: the fixed #b388ff and
++// Kick's #53fc18 were pale on light themes.
++const allCss = files.filter((f) => f.endsWith('.css')).map((f) => fs.readFileSync(f, 'utf8')).join('\n');
++assert.ok(!/(^|[^-\w])color:\s*(#b388ff|var\(--reward-color, #b388ff\))/m.test(allCss), 'no fixed pale violet text');
++assert.match(style, /\.chat-relay-badge \{ color: color-mix\(in srgb, var\(--relay-color, #888\) 55%, var\(--text-primary\)\)/);
console.log('theme tokens defined: all checks passed');