openvibers/openvibe.live Commits
Status words and badges use the readable status twins (var(--<status>-text, var(--<status>))) (#312)
Changes
@@@ -1022,7 +1022,7 @@padding: 10px 14px;margin-bottom: 16px;font-size: 0.85rem;-- color: var(--warning, #f39c12);++ color: var(--warning-text, var(--warning, #f39c12));}.bc-active-notice i {font-size: 1.1rem;@@@ -1250,7 +1250,7 @@/* ── Required Asterisk ───────────────────────────────────────── */.bc-required {-- color: var(--danger, #e74c3c);++ color: var(--danger-text, var(--danger, #e74c3c));font-weight: 700;}@@@ -1763,7 +1763,7 @@flex: 1 1 200px;}.bc-ws-restream-cooldown i.fa-triangle-exclamation {-- color: var(--warning, #e0a800);++ color: var(--warning-text, var(--warning, #e0a800));}/* ── Workspace tabs ── */@@@ -97,11 +97,11 @@}.ctx-btn:hover { background: var(--bg-hover); }.ctx-btn i { width: 16px; text-align: center; color: var(--text-muted); font-size: 0.8rem; }--.ctx-btn-danger { color: var(--danger); }--.ctx-btn-danger i { color: var(--danger); }++.ctx-btn-danger { color: var(--danger-text, var(--danger)); }++.ctx-btn-danger i { color: var(--danger-text, var(--danger)); }.ctx-btn-danger:hover { background: rgba(231,76,60,0.12); }--.ctx-btn-warn { color: var(--warning, #f39c12); }--.ctx-btn-warn i { color: var(--warning, #f39c12); }++.ctx-btn-warn { color: var(--warning-text, var(--warning, #f39c12)); }++.ctx-btn-warn i { color: var(--warning-text, var(--warning, #f39c12)); }.ctx-btn-warn:hover { background: rgba(243,156,18,0.12); }/* Deleted message fade-out */@@@ -172,7 +172,7 @@background: var(--bg-primary, #1e1e24);border-bottom: 1px solid var(--border, #3a3a44);font-size: 1.05rem; font-weight: 600;-- color: var(--warning, #f59e0b);++ color: var(--warning-text, var(--warning, #f59e0b));}.link-trust-header i { font-size: 1.2rem; }@@@ -206,7 +206,7 @@transition: color 0.15s, background 0.15s;}.bc-ws-item:hover .bc-ws-item-del { display: flex; align-items: center; }--.bc-ws-item-del:hover { color: var(--danger); background: color-mix(in srgb, var(--danger) 10%, transparent); }++.bc-ws-item-del:hover { color: var(--danger-text, var(--danger)); background: color-mix(in srgb, var(--danger) 10%, transparent); }.bc-ws-empty {flex: 1;display: flex;@@@ -790,8 +790,8 @@line-height: 1.35;overflow-wrap: anywhere;}--.bc-restream-err { color: var(--danger, #e74c3c); }--.bc-restream-warn { color: var(--warning, #f39c12); }++.bc-restream-err { color: var(--danger-text, var(--danger, #e74c3c)); }++.bc-restream-warn { color: var(--warning-text, var(--warning, #f39c12)); }.bc-restream-transport {margin-left: 6px;padding: 1px 5px;@@@ -829,11 +829,11 @@border-radius: 10px;white-space: nowrap;}--.bc-restream-status-live { background: rgba(46, 204, 113, 0.15); color: var(--success, #2ecc71); }--.bc-restream-status-starting { background: rgba(243, 156, 18, 0.15); color: var(--warning, #f39c12); }--.bc-restream-status-error { background: rgba(231, 76, 60, 0.15); color: var(--danger, #e74c3c); }++.bc-restream-status-live { background: rgba(46, 204, 113, 0.15); color: var(--success-text, var(--success, #2ecc71)); }++.bc-restream-status-starting { background: rgba(243, 156, 18, 0.15); color: var(--warning-text, var(--warning, #f39c12)); }++.bc-restream-status-error { background: rgba(231, 76, 60, 0.15); color: var(--danger-text, var(--danger, #e74c3c)); }.bc-restream-status-idle { background: var(--bg-tertiary); color: var(--text-secondary); }--.bc-restream-status-failed { background: rgba(231, 76, 60, 0.15); color: var(--danger, #e74c3c); }++.bc-restream-status-failed { background: rgba(231, 76, 60, 0.15); color: var(--danger-text, var(--danger, #e74c3c)); }.bc-restream-actions {margin-left: auto;@@@ -895,9 +895,9 @@gap: 5px;white-space: nowrap;}--.bc-rs-live { color: var(--success, #2ecc71); }--.bc-rs-connecting { color: var(--warning, #f39c12); }--.bc-rs-error { color: var(--danger, #e74c3c); }++.bc-rs-live { color: var(--success-text, var(--success, #2ecc71)); }++.bc-rs-connecting { color: var(--warning-text, var(--warning, #f39c12)); }++.bc-rs-error { color: var(--danger-text, var(--danger, #e74c3c)); }.bc-rs-ready { color: var(--text-secondary, #888); }.bc-rs-off { color: var(--text-muted, #555); }@@@ -1215,7 +1215,7 @@.bc-tab .bc-tab-close:hover {opacity: 1;background: rgba(231, 76, 60, 0.3);-- color: var(--danger);++ color: var(--danger-text, var(--danger));}#bc-stream-manager {padding: 24px;@@@ -1628,7 +1628,7 @@background: color-mix(in srgb, var(--danger) 15%, var(--bg-secondary));border: 1px solid var(--danger);border-radius: var(--radius);-- color: var(--danger);++ color: var(--danger-text, var(--danger));font-size: 0.85rem;font-weight: 600;margin: 8px 16px;@@@ -1800,10 +1800,10 @@min-width: 80px;text-align: right;}--.bc-ws-dirty { color: var(--warning, #e6a700); }++.bc-ws-dirty { color: var(--warning-text, var(--warning, #e6a700)); }.bc-ws-saving { color: var(--text-muted); }--.bc-ws-saved { color: var(--success, #2ecc71); }--.bc-ws-save-error { color: var(--danger, #e74c3c); }++.bc-ws-saved { color: var(--success-text, var(--success, #2ecc71)); }++.bc-ws-save-error { color: var(--danger-text, var(--danger, #e74c3c)); }.bc-ws-panel-hd {display: flex;align-items: center;@@@ -2433,7 +2433,7 @@.bc-switch:has(input:checked) { border-color: color-mix(in srgb, var(--danger, #ef4444) 45%, var(--border)); background: color-mix(in srgb, var(--danger, #ef4444) 7%, transparent); }.bc-switch-text { display: grid; gap: 2px; min-width: 0; }.bc-switch-text b { font-size: 0.88rem; font-weight: 700; color: var(--text-primary); }--.bc-switch-text b i { color: var(--danger, #ef4444); margin-right: 3px; }++.bc-switch-text b i { color: var(--danger-text, var(--danger, #ef4444)); margin-right: 3px; }.bc-switch-text small { font-size: 0.76rem; color: var(--text-muted); line-height: 1.4; }/* Video quality: reads as a row that opens (chevron, current values), not a static label. */@@@ -615,8 +615,8 @@.preset-btn:active { background: var(--accent); color: #000; }.preset-btn.on-cooldown { opacity: 0.5; pointer-events: none; }.staff-badge:hover { transform: translateY(-1px); }--.staff-badge-admin { color: var(--warning); background: color-mix(in srgb, var(--warning) 15%, transparent); }--.staff-badge-mod { color: var(--success); background: color-mix(in srgb, var(--success) 15%, transparent); }++.staff-badge-admin { color: var(--warning-text, var(--warning)); background: color-mix(in srgb, var(--warning) 15%, transparent); }++.staff-badge-mod { color: var(--success-text, var(--success)); background: color-mix(in srgb, var(--success) 15%, transparent); }.staff-badge[data-tip]::after {content: attr(data-tip);position: absolute; bottom: calc(100% + 7px); left: 50%;@@@ -873,7 +873,7 @@.ch-panel-edit-head .ch-panel-type { font-weight: 700; font-size: 0.85rem; flex: 1; color: var(--text-secondary); }.ch-panel-drag { cursor: grab; color: var(--text-muted); }.ch-panel-drag:active { cursor: grabbing; }--.ch-panel-del { background: none; border: none; color: var(--live-red, #e05a5a); cursor: pointer; padding: 4px; border-radius: 6px; }++.ch-panel-del { background: none; border: none; color: var(--live-red-text, var(--live-red, #e05a5a)); cursor: pointer; padding: 4px; border-radius: 6px; }.ch-panel-del:hover { background: color-mix(in srgb, var(--live-red, #e05a5a) 15%, transparent); }.ch-panel-img-row { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }.ch-panel-img-preview { width: 64px; height: 44px; object-fit: cover; border-radius: 6px; background: var(--bg-primary); }@@@ -881,7 +881,7 @@.ch-media-req { display: flex; gap: 8px; }.ch-media-hint { font-size: 0.82rem; }.ch-media-status { font-size: 0.85rem; min-height: 1em; }--.ch-media-status.err { color: var(--live-red, #e05a5a); }++.ch-media-status.err { color: var(--live-red-text, var(--live-red, #e05a5a)); }.ch-media-section-label { font-weight: 700; font-size: 0.95rem; margin-top: 6px; display: flex; align-items: center; gap: 7px; }.ch-media-now .ch-media-item { border-color: color-mix(in srgb, var(--accent) 45%, transparent); background: color-mix(in srgb, var(--accent) 8%, transparent); }.ch-media-queue { display: flex; flex-direction: column; gap: 8px; }@@@ -894,7 +894,7 @@.ch-media-meta { flex: 1 1 180px; }.ch-media-sub { font-size: 0.82rem; }.ch-media-cost { margin-left: 6px; white-space: nowrap; }--.ch-media-problem { margin-top: 3px; font-size: 0.8rem; color: var(--live-red, #e05a5a); overflow-wrap: anywhere; }++.ch-media-problem { margin-top: 3px; font-size: 0.8rem; color: var(--live-red-text, var(--live-red, #e05a5a)); overflow-wrap: anywhere; }.ch-media-mod-bar {display: flex; align-items: center; gap: 8px; flex-wrap: wrap;padding: 8px 10px; border-radius: 10px;@@@ -903,7 +903,7 @@font-size: 0.85rem;}.ch-media-actions { display: flex; gap: 5px; flex: 0 0 auto; margin-left: auto; }--.ch-media-actions .btn.danger:hover { border-color: var(--live-red, #e05a5a); color: var(--live-red, #e05a5a); }++.ch-media-actions .btn.danger:hover { border-color: var(--live-red, #e05a5a); color: var(--live-red-text, var(--live-red, #e05a5a)); }.ch-media-quote {display: flex; align-items: center; gap: 12px; flex-wrap: wrap;padding: 10px; border-radius: 10px;@@@ -912,7 +912,7 @@}.ch-media-quote.loading { justify-content: center; padding: 14px; }.ch-media-quote-price { margin-top: 4px; font-weight: 700; }--.ch-media-quote-price.err { color: var(--live-red, #e05a5a); font-weight: 600; }++.ch-media-quote-price.err { color: var(--live-red-text, var(--live-red, #e05a5a)); font-weight: 600; }.ch-media-quote-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }.ch-media-item > .ch-media-actions { min-width: 0; }@media (max-width: 900px) {@@@ -1035,7 +1035,7 @@.wh-time { font-size: 0.68rem; color: var(--text-muted); font-weight: 600; }.wh-icon { font-size: 0.8rem; color: var(--primary, var(--accent)); }.wh-temp { font-size: 0.78rem; font-weight: 700; color: var(--text-primary); }--.wh-precip { font-size: 0.62rem; color: var(--info, #60a5fa); }++.wh-precip { font-size: 0.62rem; color: var(--info-text, var(--info, #60a5fa)); }.wh-extra { font-size: 0.58rem; color: var(--text-muted); }.weather-hour.wh-now {background: color-mix(in srgb, var(--primary, var(--accent)) 18%, var(--bg-tertiary, var(--bg-secondary)));@@@ -1061,7 +1061,7 @@.wd-temps { display: flex; gap: 6px; font-size: 0.78rem; flex: 1; }.wd-hi { font-weight: 700; color: var(--text-primary); }.wd-lo { color: var(--text-muted); }--.wd-precip { font-size: 0.65rem; color: var(--info, #60a5fa); flex-shrink: 0; }++.wd-precip { font-size: 0.65rem; color: var(--info-text, var(--info, #60a5fa)); flex-shrink: 0; }#ch-weather-widget-offline .ch-weather-widget,#ch-weather-widget-offline { max-width: 500px; }.ch-offline-area .stream-main { padding-bottom: 14px; }@@@ -157,7 +157,7 @@}.vc-participant-muted {font-size: 0.6rem;-- color: var(--danger);++ color: var(--danger-text, var(--danger));opacity: 0.75;flex-shrink: 0;}@@@ -230,7 +230,7 @@font-weight: 700;text-transform: uppercase;letter-spacing: 0.05em;-- color: var(--success, #22c55e);++ color: var(--success-text, var(--success, #22c55e));display: flex;align-items: center;gap: 6px;@@@ -81,7 +81,7 @@.bucks-log-when { font-size: 0.76rem; color: var(--text-muted); }.bucks-log-note { font-size: 0.78rem; color: var(--text-secondary); margin-top: 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }.bucks-log-amt { font-weight: 700; font-size: 0.92rem; white-space: nowrap; }--.bucks-log-amt.pos { color: var(--success, #2ecc71); }++.bucks-log-amt.pos { color: var(--success-text, var(--success, #2ecc71)); }.bucks-log-amt.neg { color: var(--text-secondary); }.dash-cp-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 220px), 1fr)); gap: 12px 16px; margin-top: 8px; }.dash-cp-grid > label > span:first-child { font-weight: 600; }@@@ -607,7 +607,7 @@ body.egg-rainbow { animation: eggRainbow 2.6s linear; }@media (prefers-reduced-motion: reduce) { .home-load-more, .home-load-more i { transition: none; } }.hero-stat:hover { border-color: color-mix(in srgb, var(--accent) 38%, transparent); }.hero-stat--clickable:hover { transform: translateY(-1px); }--.hero-stat--live > i { color: var(--live-red); background: color-mix(in srgb, var(--live-red) 15%, transparent); border-color: color-mix(in srgb, var(--live-red) 34%, transparent); }++.hero-stat--live > i { color: var(--live-red-text, var(--live-red)); background: color-mix(in srgb, var(--live-red) 15%, transparent); border-color: color-mix(in srgb, var(--live-red) 34%, transparent); }.hero-stat-num { font-weight: 850; letter-spacing: -0.02em; }.hero-stat-delta {display: inline-flex; align-items: center; gap: 2px;@@@ -1042,7 +1042,7 @@ body.egg-rainbow { animation: eggRainbow 2.6s linear; }background: color-mix(in srgb, var(--accent) 13%, transparent);border: 1px solid color-mix(in srgb, var(--accent) 22%, transparent);}--.hero-stat-strip .hero-stat--live > i { color: var(--live-red); background: color-mix(in srgb, var(--live-red) 15%, transparent); border-color: color-mix(in srgb, var(--live-red) 34%, transparent); }++.hero-stat-strip .hero-stat--live > i { color: var(--live-red-text, var(--live-red)); background: color-mix(in srgb, var(--live-red) 15%, transparent); border-color: color-mix(in srgb, var(--live-red) 34%, transparent); }.hero-stat-strip .hero-stat-meta { grid-column: 2; grid-row: 1; display: flex; flex-direction: column; gap: 1px; min-width: 0; }.hero-stat-strip .hero-stat-num { font-size: 1.06rem; line-height: 1.05; letter-spacing: -0.02em; }.hero-stat-strip .hero-stat-label { font-size: 0.56rem; letter-spacing: 0.06em; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; line-height: 1.1; }@@@ -18,7 +18,7 @@.ls-title:hover { color: var(--accent); }.ls-meta { display: flex; flex-wrap: wrap; gap: 6px 10px; align-items: center; margin: 4px 0; font-size: 0.8rem; color: var(--text-muted); }.ls-kind { display: inline-flex; align-items: center; gap: 5px; padding: 1px 8px; border-radius: 999px; border: 1px solid var(--border); color: var(--text-secondary); }--.ls-live { color: var(--live-red); font-weight: 700; }++.ls-live { color: var(--live-red-text, var(--live-red)); font-weight: 700; }.ls-snippet { margin: 4px 0 0; color: var(--text-secondary); font-size: 0.9rem; overflow-wrap: anywhere; }.ls-snippet mark { background: var(--bg-tertiary); color: var(--text-primary); border-radius: 3px; padding: 0 2px; box-shadow: inset 0 -2px 0 var(--accent); }.ls-more-wrap { display: flex; justify-content: center; margin-top: 16px; }@@@ -55,8 +55,8 @@.sn-tile-sub { font-size: 0.72rem; color: var(--text-secondary); }.sn-delta { display: inline-flex; align-items: center; gap: 4px; font-size: 0.72rem; font-weight: 600; color: var(--text-secondary); }.sn-delta i { font-size: 0.7rem; }--.sn-delta.is-up i { color: var(--success, #2ecc71); }--.sn-delta.is-down i { color: var(--error, #e74c3c); }++.sn-delta.is-up i { color: var(--success-text, var(--success, #2ecc71)); }++.sn-delta.is-down i { color: var(--error-text, var(--error, #e74c3c)); }.sn-body { position: relative; transition: opacity var(--dur-fast, 160ms); }.sn-body.is-loading { opacity: 0.45; pointer-events: none; }@@@ -550,7 +550,7 @@}.msg-group-member-remove {font-size: 12px;-- color: var(--danger);++ color: var(--danger-text, var(--danger));cursor: pointer;opacity: 0.7;transition: opacity 0.15s;@@@ -587,7 +587,7 @@.msg-group-leave button {background: transparent;border: 1px solid var(--danger);-- color: var(--danger);++ color: var(--danger-text, var(--danger));padding: 8px 16px;border-radius: var(--radius);font-size: 13px;@@@ -1198,7 +1198,7 @@ body.ov-nav-overlay .navbar.ovnav-top {margin: 18px auto 0; font-size: 0.86rem; color: var(--text-secondary);}.hero-golive-note span { display: inline-flex; align-items: center; gap: 6px; }--.hero-golive-note i { color: var(--success, #22c55e); font-size: 0.78rem; }++.hero-golive-note i { color: var(--success-text, var(--success, #22c55e)); font-size: 0.78rem; }.hero-golive-note a { color: var(--accent-light); font-weight: 600; }.hero-philosophy-btn {display: inline-flex;@@@ -1432,7 +1432,7 @@ body.ov-nav-overlay .navbar.ovnav-top {font-size: 0.75rem; font-weight: 600;}.live-dot {-- color: var(--live-red); font-size: 0.6rem;++ color: var(--live-red-text, var(--live-red)); font-size: 0.6rem;animation: pulse-live 1.5s infinite;}@keyframes pulse-live {@@@ -2519,7 +2519,7 @@ a.pulse-card:hover { border-color: var(--accent); transform: translateY(-2px); }.stream-nsfw-gate-card i {font-size: clamp(2rem, 5vw, 3rem);-- color: var(--warning, #f39c12);++ color: var(--warning-text, var(--warning, #f39c12));margin-bottom: 2px;}@@@ -3631,10 +3631,10 @@ a.pulse-card:hover { border-color: var(--accent); transform: translateY(-2px); }.chat-badge i { font-size: 0.66rem; line-height: 1; }.chat-badge:hover { transform: translateY(-1px); }/* role colours: tinted fill + coloured icon + subtle matching border */--.chat-badge-admin { color: var(--warning); background: color-mix(in srgb, var(--warning) 18%, transparent); border-color: color-mix(in srgb, var(--warning) 40%, transparent); }--.chat-badge-mod { color: var(--success); background: color-mix(in srgb, var(--success) 18%, transparent); border-color: color-mix(in srgb, var(--success) 40%, transparent); }++.chat-badge-admin { color: var(--warning-text, var(--warning)); background: color-mix(in srgb, var(--warning) 18%, transparent); border-color: color-mix(in srgb, var(--warning) 40%, transparent); }++.chat-badge-mod { color: var(--success-text, var(--success)); background: color-mix(in srgb, var(--success) 18%, transparent); border-color: color-mix(in srgb, var(--success) 40%, transparent); }.chat-badge-cmod { color: #6ea8ff; background: color-mix(in srgb, #6ea8ff 18%, transparent); border-color: color-mix(in srgb, #6ea8ff 40%, transparent); }--.chat-badge-streamer { color: var(--live-red); background: color-mix(in srgb, var(--live-red) 18%, transparent); border-color: color-mix(in srgb, var(--live-red) 40%, transparent); }++.chat-badge-streamer { color: var(--live-red-text, var(--live-red)); background: color-mix(in srgb, var(--live-red) 18%, transparent); border-color: color-mix(in srgb, var(--live-red) 40%, transparent); }.chat-badge-sub { color: var(--accent-light, var(--accent)); background: color-mix(in srgb, var(--accent) 18%, transparent); border-color: color-mix(in srgb, var(--accent) 40%, transparent); }/* 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); }@@@ -3704,7 +3704,7 @@ a.pulse-card:hover { border-color: var(--accent); transform: translateY(-2px); }z-index: 1;}.chat-slowmode-info i {-- color: var(--warning);++ color: var(--warning-text, var(--warning));font-size: 0.7rem;}.chat-slowmode-label {@@@ -3712,7 +3712,7 @@ a.pulse-card:hover { border-color: var(--accent); transform: translateY(-2px); }color: var(--text-secondary, var(--text-muted));}.chat-slowmode-duration {-- color: var(--warning);++ color: var(--warning-text, var(--warning));font-variant-numeric: tabular-nums;font-weight: 600;}@@@ -4007,11 +4007,11 @@ a.pulse-card:hover { border-color: var(--accent); transform: translateY(-2px); }}.ctx-btn:hover { background: var(--bg-hover); }.ctx-btn i { width: 16px; text-align: center; color: var(--text-muted); font-size: 0.8rem; }--.ctx-btn-danger { color: var(--danger); }--.ctx-btn-danger i { color: var(--danger); }++.ctx-btn-danger { color: var(--danger-text, var(--danger)); }++.ctx-btn-danger i { color: var(--danger-text, var(--danger)); }.ctx-btn-danger:hover { background: rgba(231,76,60,0.12); }--.ctx-btn-warn { color: var(--warning, #f39c12); }--.ctx-btn-warn i { color: var(--warning, #f39c12); }++.ctx-btn-warn { color: var(--warning-text, var(--warning, #f39c12)); }++.ctx-btn-warn i { color: var(--warning-text, var(--warning, #f39c12)); }.ctx-btn-warn:hover { background: rgba(243,156,18,0.12); }/* Deleted message fade-out */@@@ -4712,13 +4712,13 @@ body :is(.modal-overlay, .bc-ws-confirm-overlay, .bc-modal, .bc-perm-overlay, .bopacity: 0.9;}.toast.success { border-color: color-mix(in srgb, var(--success) 65%, transparent); }--.toast.success i { color: var(--success); }++.toast.success i { color: var(--success-text, var(--success)); }.toast.error { border-color: color-mix(in srgb, var(--danger) 65%, transparent); }--.toast.error i { color: var(--danger); }++.toast.error i { color: var(--danger-text, var(--danger)); }.toast.warning { border-color: color-mix(in srgb, var(--warning) 70%, transparent); }--.toast.warning i { color: var(--warning); }++.toast.warning i { color: var(--warning-text, var(--warning)); }.toast.info { border-color: color-mix(in srgb, var(--info) 65%, transparent); }--.toast.info i { color: var(--info); }++.toast.info i { color: var(--info-text, var(--info)); }@keyframes toast-in {from { opacity: 0; transform: translate3d(0, -10px, 0) scale(0.98); }to { opacity: 1; transform: translate3d(0, 0, 0) scale(1); }@@@ -5283,7 +5283,7 @@ body :is(.modal-overlay, .bc-ws-confirm-overlay, .bc-modal, .bc-perm-overlay, .b/* ── Media Request tab ── */.ch-media-req input { flex: 1; }.ch-media-hint i { margin-right: 3px; opacity: 0.8; }--.ch-media-status.ok { color: var(--success, #4fd48a); }++.ch-media-status.ok { color: var(--success-text, var(--success, #4fd48a)); }.ch-media-section-label i { color: var(--accent); }.ch-media-item { display: flex; align-items: center; gap: 12px; background: var(--bg-secondary); border: 1px solid var(--border); border-radius: 10px; padding: 8px 10px; flex-wrap: wrap; }.ch-media-pos { width: 22px; text-align: center; font-weight: 700; color: var(--text-muted); flex-shrink: 0; }@@@ -5300,7 +5300,7 @@ body :is(.modal-overlay, .bc-ws-confirm-overlay, .bc-modal, .bc-perm-overlay, .b/* Quote card: the exact price for this link, shown before anything is charged. */.ch-media-quote-meta { min-width: 0; flex: 1; }.ch-media-quote-price i { color: var(--accent); }--.ch-media-quote-price.ok { color: var(--success, #4fd48a); }++.ch-media-quote-price.ok { color: var(--success-text, var(--success, #4fd48a)); }/* Container-relative, not viewport-relative: the channel tab is a narrow column even ona wide screen, which is why viewport breakpoints alone left the controls clipped. */@media (max-width: 900px) {@@@ -5449,7 +5449,7 @@ body :is(.modal-overlay, .bc-ws-confirm-overlay, .bc-modal, .bc-perm-overlay, .b.uai-section h4 .uai-tag { margin-left: auto; font-size: 0.68rem; padding: 1px 7px; border-radius: 999px; text-transform: none; letter-spacing: 0; }.uai-tag-today { background: color-mix(in srgb, var(--accent) 22%, transparent); color: var(--accent); }.uai-tag-all { background: var(--bg-tertiary); color: var(--text-secondary); }--.uai-tag-streamer { background: color-mix(in srgb, var(--live-red, #e05a5a) 20%, transparent); color: var(--live-red, #e05a5a); }++.uai-tag-streamer { background: color-mix(in srgb, var(--live-red, #e05a5a) 20%, transparent); color: var(--live-red-text, var(--live-red, #e05a5a)); }.uai-body { font-size: 0.9rem; line-height: 1.55; color: var(--text-primary); }/* Collapsible overview sections (collapsed by default; header toggles open) */.uai-collapsible .uai-collapse-toggle { cursor: pointer; user-select: none; }@@@ -6868,11 +6868,11 @@ body.theme-light .btn-outline:hover {text-transform: uppercase;}.paste-card-pin {-- color: var(--warning, #f59e0b);++ color: var(--warning-text, var(--warning, #f59e0b));font-size: 0.75rem;}.paste-card-burn {-- color: var(--danger, #ef4444);++ color: var(--danger-text, var(--danger, #ef4444));font-size: 0.75rem;}.paste-card-nsfw {@@@ -7521,7 +7521,7 @@ body.theme-light .btn-outline:hover {min-width: 0;}.vc-channel-count.full {-- color: var(--danger);++ color: var(--danger-text, var(--danger));}/* Participant list — shown inside channel items */@@@ -8814,7 +8814,7 @@ body.theme-light .btn-outline:hover {background: var(--bg-primary, #1e1e24);border-bottom: 1px solid var(--border, #3a3a44);font-size: 1.05rem; font-weight: 600;-- color: var(--warning, #f59e0b);++ color: var(--warning-text, var(--warning, #f59e0b));}.link-trust-header i { font-size: 1.2rem; }@@@ -9097,7 +9097,7 @@ body.theme-light .btn-outline:hover {padding: 32px 0; text-align: center; color: var(--text-muted);font-size: 0.9rem;}--.admin-tools-error { color: var(--danger); }++.admin-tools-error { color: var(--danger-text, var(--danger)); }/* Admin tools button in context menu */.ctx-btn-admin-tools { color: var(--accent); }@@@ -10348,7 +10348,7 @@ label.staff-inline-toggle.aiv-field { flex-direction:row; align-items:center; }/* The live dot keeps its pulse and stays a dot — a tile around it would hide the signal. */.section-header h2 > i.live-dot {width: auto; height: auto; background: none; border: 0; box-shadow: none;-- color: var(--live-red); font-size: 0.62rem;++ color: var(--live-red-text, var(--live-red)); font-size: 0.62rem;}/* A rule that carries the section colour out across the page and fades. */.section-header::after {@@@ -10634,7 +10634,7 @@ label.staff-inline-toggle.aiv-field { flex-direction:row; align-items:center; }.ov-conn-pill[data-state="connected"] .ov-conn-dot { background: var(--success); }@keyframes ovConnPulse { 50% { transform: scale(0.55); opacity: 0.5; } }.chat-conn-status { font-style: italic; opacity: 0.85; }--.chat-conn-status[data-state="connected"] { color: var(--success); }++.chat-conn-status[data-state="connected"] { color: var(--success-text, var(--success)); }@media (prefers-reduced-motion: reduce) {.ov-conn-pill { transition: opacity var(--motion-fast) linear; transform: translate3d(-50%, 0, 0); }.ov-conn-pill .ov-conn-dot { animation: none !important; }@@@ -97,7 +97,7 @@.ov-route-skel span:nth-child(3){height:120px;animation-delay:.2s}@keyframes ovRouteSkel{from{opacity:.55}to{opacity:1}}.ov-route-error{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin:24px auto;max-width:640px;padding:16px 18px;border-radius:14px;border:1px solid color-mix(in srgb,var(--danger,#ef4444) 40%,transparent);background:color-mix(in srgb,var(--danger,#ef4444) 10%,var(--bg-card,#171826))}-- .ov-route-error>i{font-size:1.4rem;color:var(--danger,#ef4444)}++ .ov-route-error>i{font-size:1.4rem;color:var(--danger-text, var(--danger,#ef4444))}.ov-route-error>div{flex:1;min-width:180px;display:grid;gap:2px}.ov-route-error span{color:var(--text-muted,#8b93ad);font-size:.9rem}@media (prefers-reduced-motion:reduce){.ov-route-skel span{animation:none}}@@@ -2173,7 +2173,7 @@ function createManagedStreamModal() {</button><button class="btn btn-outline" onclick="closeModal()" style="flex:1">Cancel</button></div>-- <p id="cms-error" style="display:none;color:var(--danger);margin-top:8px;font-size:0.85rem"></p>`;++ <p id="cms-error" style="display:none;color:var(--danger-text, var(--danger));margin-top:8px;font-size:0.85rem"></p>`;}function _cmsSelectMethod(method) {@@@ -1204,7 +1204,7 @@ function _wsConfirmUnsaved(message) {overlay.className = 'bc-ws-confirm-overlay';overlay.innerHTML = `<div class="bc-ws-confirm-dialog">-- <h3><i class="fa-solid fa-triangle-exclamation" style="color:var(--warning)"></i> Unsaved Changes</h3>++ <h3><i class="fa-solid fa-triangle-exclamation" style="color:var(--warning-text, var(--warning))"></i> Unsaved Changes</h3><p>${esc(message || 'You have unsaved changes.')}</p><div class="bc-ws-confirm-actions"><button class="btn btn-small" id="bc-ws-confirm-cancel">Cancel</button>@@@ -1235,7 +1235,7 @@ function _wsConfirmAction(message, { title = 'Are you sure?', okLabel = 'Confirmoverlay.className = 'bc-ws-confirm-overlay';overlay.innerHTML = `<div class="bc-ws-confirm-dialog">-- <h3><i class="fa-solid fa-triangle-exclamation" style="color:var(--warning)"></i> ${esc(title)}</h3>++ <h3><i class="fa-solid fa-triangle-exclamation" style="color:var(--warning-text, var(--warning))"></i> ${esc(title)}</h3><p>${esc(message)}</p><div class="bc-ws-confirm-actions"><button class="btn btn-small" id="bc-ws-confirm-cancel">Cancel</button>@@@ -2566,7 +2566,7 @@ function _wsRenderSlotRsCard() {<button class="btn btn-small btn-outline" onclick="_wsEditSlotRs()" title="Edit"><i class="fa-solid fa-pen"></i></button>-- <button class="btn btn-small btn-outline" style="color:var(--danger)" onclick="_wsDeleteSlotRs()" title="Delete">++ <button class="btn btn-small btn-outline" style="color:var(--danger-text, var(--danger))" onclick="_wsDeleteSlotRs()" title="Delete"><i class="fa-solid fa-trash"></i></button></div>@@@ -2616,7 +2616,7 @@ function _wsRenderRestreamList(container) {<button class="btn btn-small btn-outline" onclick="_wsEditRestreamDest(${d.id})" title="Edit"><i class="fa-solid fa-pen"></i></button>-- <button class="btn btn-small btn-outline" style="color:var(--danger)" onclick="_wsDeleteRestreamDest(${d.id})" title="Delete">++ <button class="btn btn-small btn-outline" style="color:var(--danger-text, var(--danger))" onclick="_wsDeleteRestreamDest(${d.id})" title="Delete"><i class="fa-solid fa-trash"></i></button></div>@@@ -3101,7 +3101,7 @@ function _wsRenderRestreamConnect(platform) {<i class="fa-solid fa-circle-check" style="color:#53fc18"></i><span style="flex:1"></span><button class="btn btn-small btn-outline" type="button" onclick="_wsConnectPlatform('${platform}')" title="Reconnect"><i class="fa-solid fa-rotate"></i></button>-- <button class="btn btn-small btn-outline" type="button" style="color:var(--danger)" onclick="_wsDisconnectPlatform('${platform}')"><i class="fa-solid fa-link-slash"></i> Disconnect</button>++ <button class="btn btn-small btn-outline" type="button" style="color:var(--danger-text, var(--danger))" onclick="_wsDisconnectPlatform('${platform}')"><i class="fa-solid fa-link-slash"></i> Disconnect</button></div><p class="muted" style="font-size:0.75rem;margin:6px 0 0">${providesKey? 'Your ingest URL & stream key are filled in automatically — just save.'@@@ -5818,7 +5818,7 @@ async function adminToolsIpBanAll(ip, username) {// Refresh the admin tools panel if still openconst body = document.querySelector('.admin-tools-body');if (body) {-- body.innerHTML = '<div class="admin-tools-loading"><i class="fa-solid fa-check" style="color:var(--success)"></i> Ban applied. Close and reopen to refresh.</div>';++ body.innerHTML = '<div class="admin-tools-loading"><i class="fa-solid fa-check" style="color:var(--success-text, var(--success))"></i> Ban applied. Close and reopen to refresh.</div>';}} catch (e) {toast(e.message || 'Ban failed', 'error');@@@ -1006,7 +1006,7 @@ async function loadDashTokens() {const created = t.created_at ? new Date(t.created_at).toLocaleDateString() : 'Unknown';const lastUsed = t.last_used_at ? new Date(t.last_used_at).toLocaleDateString() : 'Never';const expires = t.expires_at ? new Date(t.expires_at).toLocaleDateString() : 'Never';-- const statusClass = t.is_active ? 'color:var(--success)' : 'color:var(--danger)';++ const statusClass = t.is_active ? 'color:var(--success-text, var(--success))' : 'color:var(--danger-text, var(--danger))';const statusLabel = t.is_active ? 'Active' : 'Revoked';return `<div style="display:flex;align-items:center;gap:8px;padding:6px 10px;background:var(--bg-secondary);border-radius:6px;border:1px solid var(--border)"><div style="flex:1;min-width:0">@@@ -1184,7 +1184,7 @@ async function loadDashChatLogs(page) {pagination.innerHTML = '';}} catch (e) {-- results.innerHTML = `<p class="muted" style="color:var(--danger)">Failed to load chat logs: ${esc(e.message)}</p>`;++ results.innerHTML = `<p class="muted" style="color:var(--danger-text, var(--danger))">Failed to load chat logs: ${esc(e.message)}</p>`;}}@@@ -238,7 +238,7 @@ async function loadPasteViewer(slug) {if (p.burned || (p.burn_after_read && p.views > 1)) {container.innerHTML = `<div class="paste-burned">-- <i class="fa-solid fa-fire" style="font-size:3rem; color:var(--danger); margin-bottom:16px;"></i>++ <i class="fa-solid fa-fire" style="font-size:3rem; color:var(--danger-text, var(--danger)); margin-bottom:16px;"></i><h2>This paste has been burned</h2><p>It was set to self-destruct after being read.</p><button class="btn btn-primary" onclick="navigate('/pastes')">Back to Pastes</button>@@@ -251,7 +251,7 @@ async function loadPasteViewer(slug) {if (p.is_nsfw && !nsfwDismissed) {container.innerHTML = `<div class="paste-nsfw-gate">-- <i class="fa-solid fa-triangle-exclamation" style="font-size:3rem; color:var(--warning, #f39c12); margin-bottom:16px;"></i>++ <i class="fa-solid fa-triangle-exclamation" style="font-size:3rem; color:var(--warning-text, var(--warning, #f39c12)); margin-bottom:16px;"></i><h2>NSFW Content</h2><p>This paste has been marked as containing content that may not be suitable for all audiences.</p><div style="display:flex;gap:12px;margin-top:16px;">@@@ -422,7 +422,7 @@ async function loadPasteViewer(slug) {const isMissing = /not found/i.test(err && err.message || '');container.innerHTML = `<div class="empty-state" style="text-align:center; padding:48px;">-- <i class="fa-solid fa-circle-exclamation" style="font-size:2rem; color:var(--danger); margin-bottom:12px;"></i>++ <i class="fa-solid fa-circle-exclamation" style="font-size:2rem; color:var(--danger-text, var(--danger)); margin-bottom:12px;"></i><h3>${isMissing ? 'Paste not found' : 'Couldn\u2019t display this paste'}</h3><p>${isMissing? 'It may have been deleted or the link is invalid.'@@@ -91,7 +91,7 @@.pc-msg { padding: 2px 0; word-break: break-word; }.pc-msg.system { color: var(--text-muted, #888); font-style: italic; font-size: 0.75rem; }.pc-msg.deleted { opacity: 0.4; text-decoration: line-through; font-size: 0.75rem; }-- .pc-msg.error { color: var(--danger, #e05555); font-size: 0.75rem; }++ .pc-msg.error { color: var(--danger-text, var(--danger, #e05555)); font-size: 0.75rem; }.pc-user-name-tag { font-weight: 600; cursor: default; }.pc-time { font-size: 0.68rem; color: var(--text-muted, #888); margin-right: 3px; }.pc-stream-badge {@@@ -99,7 +99,7 @@padding: 1px 4px; border-radius: 3px; margin-right: 4px;}.pc-badge-admin { font-size: 0.6rem; color: var(--accent, #8b5cf6); margin-right: 2px; }-- .pc-badge-mod { font-size: 0.6rem; color: var(--success, #55e090); margin-right: 2px; }++ .pc-badge-mod { font-size: 0.6rem; color: var(--success-text, var(--success, #55e090)); margin-right: 2px; }.pc-emote { height: 1.2em; vertical-align: middle; }/* ── Input ── */@@@ -139,7 +139,7 @@flex-shrink: 0;line-height: 1.7;}-- .rule-list li.no .rule-icon { color: var(--danger); }++ .rule-list li.no .rule-icon { color: var(--danger-text, var(--danger)); }.rule-list li.yes .rule-icon { color: #2ecc71; }.rule-list li strong { color: var(--text); }@@@ -139,7 +139,7 @@flex-shrink: 0;line-height: 1.7;}-- .rule-list li.no .rule-icon { color: var(--danger); }++ .rule-list li.no .rule-icon { color: var(--danger-text, var(--danger)); }.rule-list li.yes .rule-icon { color: #2ecc71; }.rule-list li strong { color: var(--text); }
@@ -1022,7 +1022,7 @@
@@ -1022,7 +1022,7 @@
padding: 10px 14px;
padding: 10px 14px;
margin-bottom: 16px;
margin-bottom: 16px;
font-size: 0.85rem;
font-size: 0.85rem;
- color: var(--warning, #f39c12);
+ color: var(--warning-text, var(--warning, #f39c12));
}
}
.bc-active-notice i {
.bc-active-notice i {
font-size: 1.1rem;
font-size: 1.1rem;
@@ -1250,7 +1250,7 @@
@@ -1250,7 +1250,7 @@
/* ── Required Asterisk ───────────────────────────────────────── */
/* ── Required Asterisk ───────────────────────────────────────── */
.bc-required {
.bc-required {
- color: var(--danger, #e74c3c);
+ color: var(--danger-text, var(--danger, #e74c3c));
font-weight: 700;
font-weight: 700;
}
}
@@ -1763,7 +1763,7 @@
@@ -1763,7 +1763,7 @@
flex: 1 1 200px;
flex: 1 1 200px;
}
}
.bc-ws-restream-cooldown i.fa-triangle-exclamation {
.bc-ws-restream-cooldown i.fa-triangle-exclamation {
- color: var(--warning, #e0a800);
+ color: var(--warning-text, var(--warning, #e0a800));
}
}
/* ── Workspace tabs ── */
/* ── Workspace tabs ── */
@@ -97,11 +97,11 @@
@@ -97,11 +97,11 @@
}
}
.ctx-btn:hover { background: var(--bg-hover); }
.ctx-btn:hover { background: var(--bg-hover); }
.ctx-btn i { width: 16px; text-align: center; color: var(--text-muted); font-size: 0.8rem; }
.ctx-btn i { width: 16px; text-align: center; color: var(--text-muted); font-size: 0.8rem; }
-.ctx-btn-danger { color: var(--danger); }
-.ctx-btn-danger i { color: var(--danger); }
+.ctx-btn-danger { color: var(--danger-text, var(--danger)); }
+.ctx-btn-danger i { color: var(--danger-text, var(--danger)); }
.ctx-btn-danger:hover { background: rgba(231,76,60,0.12); }
.ctx-btn-danger:hover { background: rgba(231,76,60,0.12); }
-.ctx-btn-warn { color: var(--warning, #f39c12); }
-.ctx-btn-warn i { color: var(--warning, #f39c12); }
+.ctx-btn-warn { color: var(--warning-text, var(--warning, #f39c12)); }
+.ctx-btn-warn i { color: var(--warning-text, var(--warning, #f39c12)); }
.ctx-btn-warn:hover { background: rgba(243,156,18,0.12); }
.ctx-btn-warn:hover { background: rgba(243,156,18,0.12); }
/* Deleted message fade-out */
/* Deleted message fade-out */
@@ -172,7 +172,7 @@
@@ -172,7 +172,7 @@
background: var(--bg-primary, #1e1e24);
background: var(--bg-primary, #1e1e24);
border-bottom: 1px solid var(--border, #3a3a44);
border-bottom: 1px solid var(--border, #3a3a44);
font-size: 1.05rem; font-weight: 600;
font-size: 1.05rem; font-weight: 600;
- color: var(--warning, #f59e0b);
+ color: var(--warning-text, var(--warning, #f59e0b));
}
}
.link-trust-header i { font-size: 1.2rem; }
.link-trust-header i { font-size: 1.2rem; }
@@ -206,7 +206,7 @@
@@ -206,7 +206,7 @@
transition: color 0.15s, background 0.15s;
transition: color 0.15s, background 0.15s;
}
}
.bc-ws-item:hover .bc-ws-item-del { display: flex; align-items: center; }
.bc-ws-item:hover .bc-ws-item-del { display: flex; align-items: center; }
-.bc-ws-item-del:hover { color: var(--danger); background: color-mix(in srgb, var(--danger) 10%, transparent); }
+.bc-ws-item-del:hover { color: var(--danger-text, var(--danger)); background: color-mix(in srgb, var(--danger) 10%, transparent); }
.bc-ws-empty {
.bc-ws-empty {
flex: 1;
flex: 1;
display: flex;
display: flex;
@@ -790,8 +790,8 @@
@@ -790,8 +790,8 @@
line-height: 1.35;
line-height: 1.35;
overflow-wrap: anywhere;
overflow-wrap: anywhere;
}
}
-.bc-restream-err { color: var(--danger, #e74c3c); }
-.bc-restream-warn { color: var(--warning, #f39c12); }
+.bc-restream-err { color: var(--danger-text, var(--danger, #e74c3c)); }
+.bc-restream-warn { color: var(--warning-text, var(--warning, #f39c12)); }
.bc-restream-transport {
.bc-restream-transport {
margin-left: 6px;
margin-left: 6px;
padding: 1px 5px;
padding: 1px 5px;
@@ -829,11 +829,11 @@
@@ -829,11 +829,11 @@
border-radius: 10px;
border-radius: 10px;
white-space: nowrap;
white-space: nowrap;
}
}
-.bc-restream-status-live { background: rgba(46, 204, 113, 0.15); color: var(--success, #2ecc71); }
-.bc-restream-status-starting { background: rgba(243, 156, 18, 0.15); color: var(--warning, #f39c12); }
-.bc-restream-status-error { background: rgba(231, 76, 60, 0.15); color: var(--danger, #e74c3c); }
+.bc-restream-status-live { background: rgba(46, 204, 113, 0.15); color: var(--success-text, var(--success, #2ecc71)); }
+.bc-restream-status-starting { background: rgba(243, 156, 18, 0.15); color: var(--warning-text, var(--warning, #f39c12)); }
+.bc-restream-status-error { background: rgba(231, 76, 60, 0.15); color: var(--danger-text, var(--danger, #e74c3c)); }
.bc-restream-status-idle { background: var(--bg-tertiary); color: var(--text-secondary); }
.bc-restream-status-idle { background: var(--bg-tertiary); color: var(--text-secondary); }
-.bc-restream-status-failed { background: rgba(231, 76, 60, 0.15); color: var(--danger, #e74c3c); }
+.bc-restream-status-failed { background: rgba(231, 76, 60, 0.15); color: var(--danger-text, var(--danger, #e74c3c)); }
.bc-restream-actions {
.bc-restream-actions {
margin-left: auto;
margin-left: auto;
@@ -895,9 +895,9 @@
@@ -895,9 +895,9 @@
gap: 5px;
gap: 5px;
white-space: nowrap;
white-space: nowrap;
}
}
-.bc-rs-live { color: var(--success, #2ecc71); }
-.bc-rs-connecting { color: var(--warning, #f39c12); }
-.bc-rs-error { color: var(--danger, #e74c3c); }
+.bc-rs-live { color: var(--success-text, var(--success, #2ecc71)); }
+.bc-rs-connecting { color: var(--warning-text, var(--warning, #f39c12)); }
+.bc-rs-error { color: var(--danger-text, var(--danger, #e74c3c)); }
.bc-rs-ready { color: var(--text-secondary, #888); }
.bc-rs-ready { color: var(--text-secondary, #888); }
.bc-rs-off { color: var(--text-muted, #555); }
.bc-rs-off { color: var(--text-muted, #555); }
@@ -1215,7 +1215,7 @@
@@ -1215,7 +1215,7 @@
.bc-tab .bc-tab-close:hover {
.bc-tab .bc-tab-close:hover {
opacity: 1;
opacity: 1;
background: rgba(231, 76, 60, 0.3);
background: rgba(231, 76, 60, 0.3);
- color: var(--danger);
+ color: var(--danger-text, var(--danger));
}
}
#bc-stream-manager {
#bc-stream-manager {
padding: 24px;
padding: 24px;
@@ -1628,7 +1628,7 @@
@@ -1628,7 +1628,7 @@
background: color-mix(in srgb, var(--danger) 15%, var(--bg-secondary));
background: color-mix(in srgb, var(--danger) 15%, var(--bg-secondary));
border: 1px solid var(--danger);
border: 1px solid var(--danger);
border-radius: var(--radius);
border-radius: var(--radius);
- color: var(--danger);
+ color: var(--danger-text, var(--danger));
font-size: 0.85rem;
font-size: 0.85rem;
font-weight: 600;
font-weight: 600;
margin: 8px 16px;
margin: 8px 16px;
@@ -1800,10 +1800,10 @@
@@ -1800,10 +1800,10 @@
min-width: 80px;
min-width: 80px;
text-align: right;
text-align: right;
}
}
-.bc-ws-dirty { color: var(--warning, #e6a700); }
+.bc-ws-dirty { color: var(--warning-text, var(--warning, #e6a700)); }
.bc-ws-saving { color: var(--text-muted); }
.bc-ws-saving { color: var(--text-muted); }
-.bc-ws-saved { color: var(--success, #2ecc71); }
-.bc-ws-save-error { color: var(--danger, #e74c3c); }
+.bc-ws-saved { color: var(--success-text, var(--success, #2ecc71)); }
+.bc-ws-save-error { color: var(--danger-text, var(--danger, #e74c3c)); }
.bc-ws-panel-hd {
.bc-ws-panel-hd {
display: flex;
display: flex;
align-items: center;
align-items: center;
@@ -2433,7 +2433,7 @@
@@ -2433,7 +2433,7 @@
.bc-switch:has(input:checked) { border-color: color-mix(in srgb, var(--danger, #ef4444) 45%, var(--border)); background: color-mix(in srgb, var(--danger, #ef4444) 7%, transparent); }
.bc-switch:has(input:checked) { border-color: color-mix(in srgb, var(--danger, #ef4444) 45%, var(--border)); background: color-mix(in srgb, var(--danger, #ef4444) 7%, transparent); }
.bc-switch-text { display: grid; gap: 2px; min-width: 0; }
.bc-switch-text { display: grid; gap: 2px; min-width: 0; }
.bc-switch-text b { font-size: 0.88rem; font-weight: 700; color: var(--text-primary); }
.bc-switch-text b { font-size: 0.88rem; font-weight: 700; color: var(--text-primary); }
-.bc-switch-text b i { color: var(--danger, #ef4444); margin-right: 3px; }
+.bc-switch-text b i { color: var(--danger-text, var(--danger, #ef4444)); margin-right: 3px; }
.bc-switch-text small { font-size: 0.76rem; color: var(--text-muted); line-height: 1.4; }
.bc-switch-text small { font-size: 0.76rem; color: var(--text-muted); line-height: 1.4; }
/* Video quality: reads as a row that opens (chevron, current values), not a static label. */
/* Video quality: reads as a row that opens (chevron, current values), not a static label. */
@@ -615,8 +615,8 @@
@@ -615,8 +615,8 @@
.preset-btn:active { background: var(--accent); color: #000; }
.preset-btn:active { background: var(--accent); color: #000; }
.preset-btn.on-cooldown { opacity: 0.5; pointer-events: none; }
.preset-btn.on-cooldown { opacity: 0.5; pointer-events: none; }
.staff-badge:hover { transform: translateY(-1px); }
.staff-badge:hover { transform: translateY(-1px); }
-.staff-badge-admin { color: var(--warning); background: color-mix(in srgb, var(--warning) 15%, transparent); }
-.staff-badge-mod { color: var(--success); background: color-mix(in srgb, var(--success) 15%, transparent); }
+.staff-badge-admin { color: var(--warning-text, var(--warning)); background: color-mix(in srgb, var(--warning) 15%, transparent); }
+.staff-badge-mod { color: var(--success-text, var(--success)); background: color-mix(in srgb, var(--success) 15%, transparent); }
.staff-badge[data-tip]::after {
.staff-badge[data-tip]::after {
content: attr(data-tip);
content: attr(data-tip);
position: absolute; bottom: calc(100% + 7px); left: 50%;
position: absolute; bottom: calc(100% + 7px); left: 50%;
@@ -873,7 +873,7 @@
@@ -873,7 +873,7 @@
.ch-panel-edit-head .ch-panel-type { font-weight: 700; font-size: 0.85rem; flex: 1; color: var(--text-secondary); }
.ch-panel-edit-head .ch-panel-type { font-weight: 700; font-size: 0.85rem; flex: 1; color: var(--text-secondary); }
.ch-panel-drag { cursor: grab; color: var(--text-muted); }
.ch-panel-drag { cursor: grab; color: var(--text-muted); }
.ch-panel-drag:active { cursor: grabbing; }
.ch-panel-drag:active { cursor: grabbing; }
-.ch-panel-del { background: none; border: none; color: var(--live-red, #e05a5a); cursor: pointer; padding: 4px; border-radius: 6px; }
+.ch-panel-del { background: none; border: none; color: var(--live-red-text, var(--live-red, #e05a5a)); cursor: pointer; padding: 4px; border-radius: 6px; }
.ch-panel-del:hover { background: color-mix(in srgb, var(--live-red, #e05a5a) 15%, transparent); }
.ch-panel-del:hover { background: color-mix(in srgb, var(--live-red, #e05a5a) 15%, transparent); }
.ch-panel-img-row { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.ch-panel-img-row { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.ch-panel-img-preview { width: 64px; height: 44px; object-fit: cover; border-radius: 6px; background: var(--bg-primary); }
.ch-panel-img-preview { width: 64px; height: 44px; object-fit: cover; border-radius: 6px; background: var(--bg-primary); }
@@ -881,7 +881,7 @@
@@ -881,7 +881,7 @@
.ch-media-req { display: flex; gap: 8px; }
.ch-media-req { display: flex; gap: 8px; }
.ch-media-hint { font-size: 0.82rem; }
.ch-media-hint { font-size: 0.82rem; }
.ch-media-status { font-size: 0.85rem; min-height: 1em; }
.ch-media-status { font-size: 0.85rem; min-height: 1em; }
-.ch-media-status.err { color: var(--live-red, #e05a5a); }
+.ch-media-status.err { color: var(--live-red-text, var(--live-red, #e05a5a)); }
.ch-media-section-label { font-weight: 700; font-size: 0.95rem; margin-top: 6px; display: flex; align-items: center; gap: 7px; }
.ch-media-section-label { font-weight: 700; font-size: 0.95rem; margin-top: 6px; display: flex; align-items: center; gap: 7px; }
.ch-media-now .ch-media-item { border-color: color-mix(in srgb, var(--accent) 45%, transparent); background: color-mix(in srgb, var(--accent) 8%, transparent); }
.ch-media-now .ch-media-item { border-color: color-mix(in srgb, var(--accent) 45%, transparent); background: color-mix(in srgb, var(--accent) 8%, transparent); }
.ch-media-queue { display: flex; flex-direction: column; gap: 8px; }
.ch-media-queue { display: flex; flex-direction: column; gap: 8px; }
@@ -894,7 +894,7 @@
@@ -894,7 +894,7 @@
.ch-media-meta { flex: 1 1 180px; }
.ch-media-meta { flex: 1 1 180px; }
.ch-media-sub { font-size: 0.82rem; }
.ch-media-sub { font-size: 0.82rem; }
.ch-media-cost { margin-left: 6px; white-space: nowrap; }
.ch-media-cost { margin-left: 6px; white-space: nowrap; }
-.ch-media-problem { margin-top: 3px; font-size: 0.8rem; color: var(--live-red, #e05a5a); overflow-wrap: anywhere; }
+.ch-media-problem { margin-top: 3px; font-size: 0.8rem; color: var(--live-red-text, var(--live-red, #e05a5a)); overflow-wrap: anywhere; }
.ch-media-mod-bar {
.ch-media-mod-bar {
display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
padding: 8px 10px; border-radius: 10px;
padding: 8px 10px; border-radius: 10px;
@@ -903,7 +903,7 @@
@@ -903,7 +903,7 @@
font-size: 0.85rem;
font-size: 0.85rem;
}
}
.ch-media-actions { display: flex; gap: 5px; flex: 0 0 auto; margin-left: auto; }
.ch-media-actions { display: flex; gap: 5px; flex: 0 0 auto; margin-left: auto; }
-.ch-media-actions .btn.danger:hover { border-color: var(--live-red, #e05a5a); color: var(--live-red, #e05a5a); }
+.ch-media-actions .btn.danger:hover { border-color: var(--live-red, #e05a5a); color: var(--live-red-text, var(--live-red, #e05a5a)); }
.ch-media-quote {
.ch-media-quote {
display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
padding: 10px; border-radius: 10px;
padding: 10px; border-radius: 10px;
@@ -912,7 +912,7 @@
@@ -912,7 +912,7 @@
}
}
.ch-media-quote.loading { justify-content: center; padding: 14px; }
.ch-media-quote.loading { justify-content: center; padding: 14px; }
.ch-media-quote-price { margin-top: 4px; font-weight: 700; }
.ch-media-quote-price { margin-top: 4px; font-weight: 700; }
-.ch-media-quote-price.err { color: var(--live-red, #e05a5a); font-weight: 600; }
+.ch-media-quote-price.err { color: var(--live-red-text, var(--live-red, #e05a5a)); font-weight: 600; }
.ch-media-quote-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }
.ch-media-quote-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }
.ch-media-item > .ch-media-actions { min-width: 0; }
.ch-media-item > .ch-media-actions { min-width: 0; }
@media (max-width: 900px) {
@media (max-width: 900px) {
@@ -1035,7 +1035,7 @@
@@ -1035,7 +1035,7 @@
.wh-time { font-size: 0.68rem; color: var(--text-muted); font-weight: 600; }
.wh-time { font-size: 0.68rem; color: var(--text-muted); font-weight: 600; }
.wh-icon { font-size: 0.8rem; color: var(--primary, var(--accent)); }
.wh-icon { font-size: 0.8rem; color: var(--primary, var(--accent)); }
.wh-temp { font-size: 0.78rem; font-weight: 700; color: var(--text-primary); }
.wh-temp { font-size: 0.78rem; font-weight: 700; color: var(--text-primary); }
-.wh-precip { font-size: 0.62rem; color: var(--info, #60a5fa); }
+.wh-precip { font-size: 0.62rem; color: var(--info-text, var(--info, #60a5fa)); }
.wh-extra { font-size: 0.58rem; color: var(--text-muted); }
.wh-extra { font-size: 0.58rem; color: var(--text-muted); }
.weather-hour.wh-now {
.weather-hour.wh-now {
background: color-mix(in srgb, var(--primary, var(--accent)) 18%, var(--bg-tertiary, var(--bg-secondary)));
background: color-mix(in srgb, var(--primary, var(--accent)) 18%, var(--bg-tertiary, var(--bg-secondary)));
@@ -1061,7 +1061,7 @@
@@ -1061,7 +1061,7 @@
.wd-temps { display: flex; gap: 6px; font-size: 0.78rem; flex: 1; }
.wd-temps { display: flex; gap: 6px; font-size: 0.78rem; flex: 1; }
.wd-hi { font-weight: 700; color: var(--text-primary); }
.wd-hi { font-weight: 700; color: var(--text-primary); }
.wd-lo { color: var(--text-muted); }
.wd-lo { color: var(--text-muted); }
-.wd-precip { font-size: 0.65rem; color: var(--info, #60a5fa); flex-shrink: 0; }
+.wd-precip { font-size: 0.65rem; color: var(--info-text, var(--info, #60a5fa)); flex-shrink: 0; }
#ch-weather-widget-offline .ch-weather-widget,
#ch-weather-widget-offline .ch-weather-widget,
#ch-weather-widget-offline { max-width: 500px; }
#ch-weather-widget-offline { max-width: 500px; }
.ch-offline-area .stream-main { padding-bottom: 14px; }
.ch-offline-area .stream-main { padding-bottom: 14px; }
@@ -157,7 +157,7 @@
@@ -157,7 +157,7 @@
}
}
.vc-participant-muted {
.vc-participant-muted {
font-size: 0.6rem;
font-size: 0.6rem;
- color: var(--danger);
+ color: var(--danger-text, var(--danger));
opacity: 0.75;
opacity: 0.75;
flex-shrink: 0;
flex-shrink: 0;
}
}
@@ -230,7 +230,7 @@
@@ -230,7 +230,7 @@
font-weight: 700;
font-weight: 700;
text-transform: uppercase;
text-transform: uppercase;
letter-spacing: 0.05em;
letter-spacing: 0.05em;
- color: var(--success, #22c55e);
+ color: var(--success-text, var(--success, #22c55e));
display: flex;
display: flex;
align-items: center;
align-items: center;
gap: 6px;
gap: 6px;
@@ -81,7 +81,7 @@
@@ -81,7 +81,7 @@
.bucks-log-when { font-size: 0.76rem; color: var(--text-muted); }
.bucks-log-when { font-size: 0.76rem; color: var(--text-muted); }
.bucks-log-note { font-size: 0.78rem; color: var(--text-secondary); margin-top: 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bucks-log-note { font-size: 0.78rem; color: var(--text-secondary); margin-top: 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bucks-log-amt { font-weight: 700; font-size: 0.92rem; white-space: nowrap; }
.bucks-log-amt { font-weight: 700; font-size: 0.92rem; white-space: nowrap; }
-.bucks-log-amt.pos { color: var(--success, #2ecc71); }
+.bucks-log-amt.pos { color: var(--success-text, var(--success, #2ecc71)); }
.bucks-log-amt.neg { color: var(--text-secondary); }
.bucks-log-amt.neg { color: var(--text-secondary); }
.dash-cp-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 220px), 1fr)); gap: 12px 16px; margin-top: 8px; }
.dash-cp-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 220px), 1fr)); gap: 12px 16px; margin-top: 8px; }
.dash-cp-grid > label > span:first-child { font-weight: 600; }
.dash-cp-grid > label > span:first-child { font-weight: 600; }
@@ -607,7 +607,7 @@ body.egg-rainbow { animation: eggRainbow 2.6s linear; }
@@ -607,7 +607,7 @@ body.egg-rainbow { animation: eggRainbow 2.6s linear; }
@media (prefers-reduced-motion: reduce) { .home-load-more, .home-load-more i { transition: none; } }
@media (prefers-reduced-motion: reduce) { .home-load-more, .home-load-more i { transition: none; } }
.hero-stat:hover { border-color: color-mix(in srgb, var(--accent) 38%, transparent); }
.hero-stat:hover { border-color: color-mix(in srgb, var(--accent) 38%, transparent); }
.hero-stat--clickable:hover { transform: translateY(-1px); }
.hero-stat--clickable:hover { transform: translateY(-1px); }
-.hero-stat--live > i { color: var(--live-red); background: color-mix(in srgb, var(--live-red) 15%, transparent); border-color: color-mix(in srgb, var(--live-red) 34%, transparent); }
+.hero-stat--live > i { color: var(--live-red-text, var(--live-red)); background: color-mix(in srgb, var(--live-red) 15%, transparent); border-color: color-mix(in srgb, var(--live-red) 34%, transparent); }
.hero-stat-num { font-weight: 850; letter-spacing: -0.02em; }
.hero-stat-num { font-weight: 850; letter-spacing: -0.02em; }
.hero-stat-delta {
.hero-stat-delta {
display: inline-flex; align-items: center; gap: 2px;
display: inline-flex; align-items: center; gap: 2px;
@@ -1042,7 +1042,7 @@ body.egg-rainbow { animation: eggRainbow 2.6s linear; }
@@ -1042,7 +1042,7 @@ body.egg-rainbow { animation: eggRainbow 2.6s linear; }
background: color-mix(in srgb, var(--accent) 13%, transparent);
background: color-mix(in srgb, var(--accent) 13%, transparent);
border: 1px solid color-mix(in srgb, var(--accent) 22%, transparent);
border: 1px solid color-mix(in srgb, var(--accent) 22%, transparent);
}
}
-.hero-stat-strip .hero-stat--live > i { color: var(--live-red); background: color-mix(in srgb, var(--live-red) 15%, transparent); border-color: color-mix(in srgb, var(--live-red) 34%, transparent); }
+.hero-stat-strip .hero-stat--live > i { color: var(--live-red-text, var(--live-red)); background: color-mix(in srgb, var(--live-red) 15%, transparent); border-color: color-mix(in srgb, var(--live-red) 34%, transparent); }
.hero-stat-strip .hero-stat-meta { grid-column: 2; grid-row: 1; display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.hero-stat-strip .hero-stat-meta { grid-column: 2; grid-row: 1; display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.hero-stat-strip .hero-stat-num { font-size: 1.06rem; line-height: 1.05; letter-spacing: -0.02em; }
.hero-stat-strip .hero-stat-num { font-size: 1.06rem; line-height: 1.05; letter-spacing: -0.02em; }
.hero-stat-strip .hero-stat-label { font-size: 0.56rem; letter-spacing: 0.06em; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; line-height: 1.1; }
.hero-stat-strip .hero-stat-label { font-size: 0.56rem; letter-spacing: 0.06em; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; line-height: 1.1; }
@@ -18,7 +18,7 @@
@@ -18,7 +18,7 @@
.ls-title:hover { color: var(--accent); }
.ls-title:hover { color: var(--accent); }
.ls-meta { display: flex; flex-wrap: wrap; gap: 6px 10px; align-items: center; margin: 4px 0; font-size: 0.8rem; color: var(--text-muted); }
.ls-meta { display: flex; flex-wrap: wrap; gap: 6px 10px; align-items: center; margin: 4px 0; font-size: 0.8rem; color: var(--text-muted); }
.ls-kind { display: inline-flex; align-items: center; gap: 5px; padding: 1px 8px; border-radius: 999px; border: 1px solid var(--border); color: var(--text-secondary); }
.ls-kind { display: inline-flex; align-items: center; gap: 5px; padding: 1px 8px; border-radius: 999px; border: 1px solid var(--border); color: var(--text-secondary); }
-.ls-live { color: var(--live-red); font-weight: 700; }
+.ls-live { color: var(--live-red-text, var(--live-red)); font-weight: 700; }
.ls-snippet { margin: 4px 0 0; color: var(--text-secondary); font-size: 0.9rem; overflow-wrap: anywhere; }
.ls-snippet { margin: 4px 0 0; color: var(--text-secondary); font-size: 0.9rem; overflow-wrap: anywhere; }
.ls-snippet mark { background: var(--bg-tertiary); color: var(--text-primary); border-radius: 3px; padding: 0 2px; box-shadow: inset 0 -2px 0 var(--accent); }
.ls-snippet mark { background: var(--bg-tertiary); color: var(--text-primary); border-radius: 3px; padding: 0 2px; box-shadow: inset 0 -2px 0 var(--accent); }
.ls-more-wrap { display: flex; justify-content: center; margin-top: 16px; }
.ls-more-wrap { display: flex; justify-content: center; margin-top: 16px; }
@@ -55,8 +55,8 @@
@@ -55,8 +55,8 @@
.sn-tile-sub { font-size: 0.72rem; color: var(--text-secondary); }
.sn-tile-sub { font-size: 0.72rem; color: var(--text-secondary); }
.sn-delta { display: inline-flex; align-items: center; gap: 4px; font-size: 0.72rem; font-weight: 600; color: var(--text-secondary); }
.sn-delta { display: inline-flex; align-items: center; gap: 4px; font-size: 0.72rem; font-weight: 600; color: var(--text-secondary); }
.sn-delta i { font-size: 0.7rem; }
.sn-delta i { font-size: 0.7rem; }
-.sn-delta.is-up i { color: var(--success, #2ecc71); }
-.sn-delta.is-down i { color: var(--error, #e74c3c); }
+.sn-delta.is-up i { color: var(--success-text, var(--success, #2ecc71)); }
+.sn-delta.is-down i { color: var(--error-text, var(--error, #e74c3c)); }
.sn-body { position: relative; transition: opacity var(--dur-fast, 160ms); }
.sn-body { position: relative; transition: opacity var(--dur-fast, 160ms); }
.sn-body.is-loading { opacity: 0.45; pointer-events: none; }
.sn-body.is-loading { opacity: 0.45; pointer-events: none; }
@@ -550,7 +550,7 @@
@@ -550,7 +550,7 @@
}
}
.msg-group-member-remove {
.msg-group-member-remove {
font-size: 12px;
font-size: 12px;
- color: var(--danger);
+ color: var(--danger-text, var(--danger));
cursor: pointer;
cursor: pointer;
opacity: 0.7;
opacity: 0.7;
transition: opacity 0.15s;
transition: opacity 0.15s;
@@ -587,7 +587,7 @@
@@ -587,7 +587,7 @@
.msg-group-leave button {
.msg-group-leave button {
background: transparent;
background: transparent;
border: 1px solid var(--danger);
border: 1px solid var(--danger);
- color: var(--danger);
+ color: var(--danger-text, var(--danger));
padding: 8px 16px;
padding: 8px 16px;
border-radius: var(--radius);
border-radius: var(--radius);
font-size: 13px;
font-size: 13px;
@@ -1198,7 +1198,7 @@ body.ov-nav-overlay .navbar.ovnav-top {
@@ -1198,7 +1198,7 @@ body.ov-nav-overlay .navbar.ovnav-top {
margin: 18px auto 0; font-size: 0.86rem; color: var(--text-secondary);
margin: 18px auto 0; font-size: 0.86rem; color: var(--text-secondary);
}
}
.hero-golive-note span { display: inline-flex; align-items: center; gap: 6px; }
.hero-golive-note span { display: inline-flex; align-items: center; gap: 6px; }
-.hero-golive-note i { color: var(--success, #22c55e); font-size: 0.78rem; }
+.hero-golive-note i { color: var(--success-text, var(--success, #22c55e)); font-size: 0.78rem; }
.hero-golive-note a { color: var(--accent-light); font-weight: 600; }
.hero-golive-note a { color: var(--accent-light); font-weight: 600; }
.hero-philosophy-btn {
.hero-philosophy-btn {
display: inline-flex;
display: inline-flex;
@@ -1432,7 +1432,7 @@ body.ov-nav-overlay .navbar.ovnav-top {
@@ -1432,7 +1432,7 @@ body.ov-nav-overlay .navbar.ovnav-top {
font-size: 0.75rem; font-weight: 600;
font-size: 0.75rem; font-weight: 600;
}
}
.live-dot {
.live-dot {
- color: var(--live-red); font-size: 0.6rem;
+ color: var(--live-red-text, var(--live-red)); font-size: 0.6rem;
animation: pulse-live 1.5s infinite;
animation: pulse-live 1.5s infinite;
}
}
@keyframes pulse-live {
@keyframes pulse-live {
@@ -2519,7 +2519,7 @@ a.pulse-card:hover { border-color: var(--accent); transform: translateY(-2px); }
@@ -2519,7 +2519,7 @@ a.pulse-card:hover { border-color: var(--accent); transform: translateY(-2px); }
.stream-nsfw-gate-card i {
.stream-nsfw-gate-card i {
font-size: clamp(2rem, 5vw, 3rem);
font-size: clamp(2rem, 5vw, 3rem);
- color: var(--warning, #f39c12);
+ color: var(--warning-text, var(--warning, #f39c12));
margin-bottom: 2px;
margin-bottom: 2px;
}
}
@@ -3631,10 +3631,10 @@ a.pulse-card:hover { border-color: var(--accent); transform: translateY(-2px); }
@@ -3631,10 +3631,10 @@ a.pulse-card:hover { border-color: var(--accent); transform: translateY(-2px); }
.chat-badge i { font-size: 0.66rem; line-height: 1; }
.chat-badge i { font-size: 0.66rem; line-height: 1; }
.chat-badge:hover { transform: translateY(-1px); }
.chat-badge:hover { transform: translateY(-1px); }
/* role colours: tinted fill + coloured icon + subtle matching border */
/* role colours: tinted fill + coloured icon + subtle matching border */
-.chat-badge-admin { color: var(--warning); background: color-mix(in srgb, var(--warning) 18%, transparent); border-color: color-mix(in srgb, var(--warning) 40%, transparent); }
-.chat-badge-mod { color: var(--success); background: color-mix(in srgb, var(--success) 18%, transparent); border-color: color-mix(in srgb, var(--success) 40%, transparent); }
+.chat-badge-admin { color: var(--warning-text, var(--warning)); background: color-mix(in srgb, var(--warning) 18%, transparent); border-color: color-mix(in srgb, var(--warning) 40%, transparent); }
+.chat-badge-mod { color: var(--success-text, var(--success)); background: color-mix(in srgb, var(--success) 18%, transparent); border-color: color-mix(in srgb, var(--success) 40%, transparent); }
.chat-badge-cmod { color: #6ea8ff; background: color-mix(in srgb, #6ea8ff 18%, transparent); border-color: color-mix(in srgb, #6ea8ff 40%, transparent); }
.chat-badge-cmod { color: #6ea8ff; background: color-mix(in srgb, #6ea8ff 18%, transparent); border-color: color-mix(in srgb, #6ea8ff 40%, transparent); }
-.chat-badge-streamer { color: var(--live-red); background: color-mix(in srgb, var(--live-red) 18%, transparent); border-color: color-mix(in srgb, var(--live-red) 40%, transparent); }
+.chat-badge-streamer { color: var(--live-red-text, var(--live-red)); background: color-mix(in srgb, var(--live-red) 18%, transparent); border-color: color-mix(in srgb, var(--live-red) 40%, transparent); }
.chat-badge-sub { color: var(--accent-light, var(--accent)); background: color-mix(in srgb, var(--accent) 18%, transparent); border-color: color-mix(in srgb, var(--accent) 40%, transparent); }
.chat-badge-sub { color: var(--accent-light, var(--accent)); background: color-mix(in srgb, var(--accent) 18%, transparent); border-color: color-mix(in srgb, var(--accent) 40%, transparent); }
/* VIP member badge (OpenVibe.VIP): a short text label, so it is a pill rather than an icon square. */
/* 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); }
.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); }
@@ -3704,7 +3704,7 @@ a.pulse-card:hover { border-color: var(--accent); transform: translateY(-2px); }
@@ -3704,7 +3704,7 @@ a.pulse-card:hover { border-color: var(--accent); transform: translateY(-2px); }
z-index: 1;
z-index: 1;
}
}
.chat-slowmode-info i {
.chat-slowmode-info i {
- color: var(--warning);
+ color: var(--warning-text, var(--warning));
font-size: 0.7rem;
font-size: 0.7rem;
}
}
.chat-slowmode-label {
.chat-slowmode-label {
@@ -3712,7 +3712,7 @@ a.pulse-card:hover { border-color: var(--accent); transform: translateY(-2px); }
@@ -3712,7 +3712,7 @@ a.pulse-card:hover { border-color: var(--accent); transform: translateY(-2px); }
color: var(--text-secondary, var(--text-muted));
color: var(--text-secondary, var(--text-muted));
}
}
.chat-slowmode-duration {
.chat-slowmode-duration {
- color: var(--warning);
+ color: var(--warning-text, var(--warning));
font-variant-numeric: tabular-nums;
font-variant-numeric: tabular-nums;
font-weight: 600;
font-weight: 600;
}
}
@@ -4007,11 +4007,11 @@ a.pulse-card:hover { border-color: var(--accent); transform: translateY(-2px); }
@@ -4007,11 +4007,11 @@ a.pulse-card:hover { border-color: var(--accent); transform: translateY(-2px); }
}
}
.ctx-btn:hover { background: var(--bg-hover); }
.ctx-btn:hover { background: var(--bg-hover); }
.ctx-btn i { width: 16px; text-align: center; color: var(--text-muted); font-size: 0.8rem; }
.ctx-btn i { width: 16px; text-align: center; color: var(--text-muted); font-size: 0.8rem; }
-.ctx-btn-danger { color: var(--danger); }
-.ctx-btn-danger i { color: var(--danger); }
+.ctx-btn-danger { color: var(--danger-text, var(--danger)); }
+.ctx-btn-danger i { color: var(--danger-text, var(--danger)); }
.ctx-btn-danger:hover { background: rgba(231,76,60,0.12); }
.ctx-btn-danger:hover { background: rgba(231,76,60,0.12); }
-.ctx-btn-warn { color: var(--warning, #f39c12); }
-.ctx-btn-warn i { color: var(--warning, #f39c12); }
+.ctx-btn-warn { color: var(--warning-text, var(--warning, #f39c12)); }
+.ctx-btn-warn i { color: var(--warning-text, var(--warning, #f39c12)); }
.ctx-btn-warn:hover { background: rgba(243,156,18,0.12); }
.ctx-btn-warn:hover { background: rgba(243,156,18,0.12); }
/* Deleted message fade-out */
/* Deleted message fade-out */
@@ -4712,13 +4712,13 @@ body :is(.modal-overlay, .bc-ws-confirm-overlay, .bc-modal, .bc-perm-overlay, .b
@@ -4712,13 +4712,13 @@ body :is(.modal-overlay, .bc-ws-confirm-overlay, .bc-modal, .bc-perm-overlay, .b
opacity: 0.9;
opacity: 0.9;
}
}
.toast.success { border-color: color-mix(in srgb, var(--success) 65%, transparent); }
.toast.success { border-color: color-mix(in srgb, var(--success) 65%, transparent); }
-.toast.success i { color: var(--success); }
+.toast.success i { color: var(--success-text, var(--success)); }
.toast.error { border-color: color-mix(in srgb, var(--danger) 65%, transparent); }
.toast.error { border-color: color-mix(in srgb, var(--danger) 65%, transparent); }
-.toast.error i { color: var(--danger); }
+.toast.error i { color: var(--danger-text, var(--danger)); }
.toast.warning { border-color: color-mix(in srgb, var(--warning) 70%, transparent); }
.toast.warning { border-color: color-mix(in srgb, var(--warning) 70%, transparent); }
-.toast.warning i { color: var(--warning); }
+.toast.warning i { color: var(--warning-text, var(--warning)); }
.toast.info { border-color: color-mix(in srgb, var(--info) 65%, transparent); }
.toast.info { border-color: color-mix(in srgb, var(--info) 65%, transparent); }
-.toast.info i { color: var(--info); }
+.toast.info i { color: var(--info-text, var(--info)); }
@keyframes toast-in {
@keyframes toast-in {
from { opacity: 0; transform: translate3d(0, -10px, 0) scale(0.98); }
from { opacity: 0; transform: translate3d(0, -10px, 0) scale(0.98); }
to { opacity: 1; transform: translate3d(0, 0, 0) scale(1); }
to { opacity: 1; transform: translate3d(0, 0, 0) scale(1); }
@@ -5283,7 +5283,7 @@ body :is(.modal-overlay, .bc-ws-confirm-overlay, .bc-modal, .bc-perm-overlay, .b
@@ -5283,7 +5283,7 @@ body :is(.modal-overlay, .bc-ws-confirm-overlay, .bc-modal, .bc-perm-overlay, .b
/* ── Media Request tab ── */
/* ── Media Request tab ── */
.ch-media-req input { flex: 1; }
.ch-media-req input { flex: 1; }
.ch-media-hint i { margin-right: 3px; opacity: 0.8; }
.ch-media-hint i { margin-right: 3px; opacity: 0.8; }
-.ch-media-status.ok { color: var(--success, #4fd48a); }
+.ch-media-status.ok { color: var(--success-text, var(--success, #4fd48a)); }
.ch-media-section-label i { color: var(--accent); }
.ch-media-section-label i { color: var(--accent); }
.ch-media-item { display: flex; align-items: center; gap: 12px; background: var(--bg-secondary); border: 1px solid var(--border); border-radius: 10px; padding: 8px 10px; flex-wrap: wrap; }
.ch-media-item { display: flex; align-items: center; gap: 12px; background: var(--bg-secondary); border: 1px solid var(--border); border-radius: 10px; padding: 8px 10px; flex-wrap: wrap; }
.ch-media-pos { width: 22px; text-align: center; font-weight: 700; color: var(--text-muted); flex-shrink: 0; }
.ch-media-pos { width: 22px; text-align: center; font-weight: 700; color: var(--text-muted); flex-shrink: 0; }
@@ -5300,7 +5300,7 @@ body :is(.modal-overlay, .bc-ws-confirm-overlay, .bc-modal, .bc-perm-overlay, .b
@@ -5300,7 +5300,7 @@ body :is(.modal-overlay, .bc-ws-confirm-overlay, .bc-modal, .bc-perm-overlay, .b
/* Quote card: the exact price for this link, shown before anything is charged. */
/* Quote card: the exact price for this link, shown before anything is charged. */
.ch-media-quote-meta { min-width: 0; flex: 1; }
.ch-media-quote-meta { min-width: 0; flex: 1; }
.ch-media-quote-price i { color: var(--accent); }
.ch-media-quote-price i { color: var(--accent); }
-.ch-media-quote-price.ok { color: var(--success, #4fd48a); }
+.ch-media-quote-price.ok { color: var(--success-text, var(--success, #4fd48a)); }
/* Container-relative, not viewport-relative: the channel tab is a narrow column even on
/* Container-relative, not viewport-relative: the channel tab is a narrow column even on
a wide screen, which is why viewport breakpoints alone left the controls clipped. */
a wide screen, which is why viewport breakpoints alone left the controls clipped. */
@media (max-width: 900px) {
@media (max-width: 900px) {
@@ -5449,7 +5449,7 @@ body :is(.modal-overlay, .bc-ws-confirm-overlay, .bc-modal, .bc-perm-overlay, .b
@@ -5449,7 +5449,7 @@ body :is(.modal-overlay, .bc-ws-confirm-overlay, .bc-modal, .bc-perm-overlay, .b
.uai-section h4 .uai-tag { margin-left: auto; font-size: 0.68rem; padding: 1px 7px; border-radius: 999px; text-transform: none; letter-spacing: 0; }
.uai-section h4 .uai-tag { margin-left: auto; font-size: 0.68rem; padding: 1px 7px; border-radius: 999px; text-transform: none; letter-spacing: 0; }
.uai-tag-today { background: color-mix(in srgb, var(--accent) 22%, transparent); color: var(--accent); }
.uai-tag-today { background: color-mix(in srgb, var(--accent) 22%, transparent); color: var(--accent); }
.uai-tag-all { background: var(--bg-tertiary); color: var(--text-secondary); }
.uai-tag-all { background: var(--bg-tertiary); color: var(--text-secondary); }
-.uai-tag-streamer { background: color-mix(in srgb, var(--live-red, #e05a5a) 20%, transparent); color: var(--live-red, #e05a5a); }
+.uai-tag-streamer { background: color-mix(in srgb, var(--live-red, #e05a5a) 20%, transparent); color: var(--live-red-text, var(--live-red, #e05a5a)); }
.uai-body { font-size: 0.9rem; line-height: 1.55; color: var(--text-primary); }
.uai-body { font-size: 0.9rem; line-height: 1.55; color: var(--text-primary); }
/* Collapsible overview sections (collapsed by default; header toggles open) */
/* Collapsible overview sections (collapsed by default; header toggles open) */
.uai-collapsible .uai-collapse-toggle { cursor: pointer; user-select: none; }
.uai-collapsible .uai-collapse-toggle { cursor: pointer; user-select: none; }
@@ -6868,11 +6868,11 @@ body.theme-light .btn-outline:hover {
@@ -6868,11 +6868,11 @@ body.theme-light .btn-outline:hover {
text-transform: uppercase;
text-transform: uppercase;
}
}
.paste-card-pin {
.paste-card-pin {
- color: var(--warning, #f59e0b);
+ color: var(--warning-text, var(--warning, #f59e0b));
font-size: 0.75rem;
font-size: 0.75rem;
}
}
.paste-card-burn {
.paste-card-burn {
- color: var(--danger, #ef4444);
+ color: var(--danger-text, var(--danger, #ef4444));
font-size: 0.75rem;
font-size: 0.75rem;
}
}
.paste-card-nsfw {
.paste-card-nsfw {
@@ -7521,7 +7521,7 @@ body.theme-light .btn-outline:hover {
@@ -7521,7 +7521,7 @@ body.theme-light .btn-outline:hover {
min-width: 0;
min-width: 0;
}
}
.vc-channel-count.full {
.vc-channel-count.full {
- color: var(--danger);
+ color: var(--danger-text, var(--danger));
}
}
/* Participant list — shown inside channel items */
/* Participant list — shown inside channel items */
@@ -8814,7 +8814,7 @@ body.theme-light .btn-outline:hover {
@@ -8814,7 +8814,7 @@ body.theme-light .btn-outline:hover {
background: var(--bg-primary, #1e1e24);
background: var(--bg-primary, #1e1e24);
border-bottom: 1px solid var(--border, #3a3a44);
border-bottom: 1px solid var(--border, #3a3a44);
font-size: 1.05rem; font-weight: 600;
font-size: 1.05rem; font-weight: 600;
- color: var(--warning, #f59e0b);
+ color: var(--warning-text, var(--warning, #f59e0b));
}
}
.link-trust-header i { font-size: 1.2rem; }
.link-trust-header i { font-size: 1.2rem; }
@@ -9097,7 +9097,7 @@ body.theme-light .btn-outline:hover {
@@ -9097,7 +9097,7 @@ body.theme-light .btn-outline:hover {
padding: 32px 0; text-align: center; color: var(--text-muted);
padding: 32px 0; text-align: center; color: var(--text-muted);
font-size: 0.9rem;
font-size: 0.9rem;
}
}
-.admin-tools-error { color: var(--danger); }
+.admin-tools-error { color: var(--danger-text, var(--danger)); }
/* Admin tools button in context menu */
/* Admin tools button in context menu */
.ctx-btn-admin-tools { color: var(--accent); }
.ctx-btn-admin-tools { color: var(--accent); }
@@ -10348,7 +10348,7 @@ label.staff-inline-toggle.aiv-field { flex-direction:row; align-items:center; }
@@ -10348,7 +10348,7 @@ label.staff-inline-toggle.aiv-field { flex-direction:row; align-items:center; }
/* The live dot keeps its pulse and stays a dot — a tile around it would hide the signal. */
/* The live dot keeps its pulse and stays a dot — a tile around it would hide the signal. */
.section-header h2 > i.live-dot {
.section-header h2 > i.live-dot {
width: auto; height: auto; background: none; border: 0; box-shadow: none;
width: auto; height: auto; background: none; border: 0; box-shadow: none;
- color: var(--live-red); font-size: 0.62rem;
+ color: var(--live-red-text, var(--live-red)); font-size: 0.62rem;
}
}
/* A rule that carries the section colour out across the page and fades. */
/* A rule that carries the section colour out across the page and fades. */
.section-header::after {
.section-header::after {
@@ -10634,7 +10634,7 @@ label.staff-inline-toggle.aiv-field { flex-direction:row; align-items:center; }
@@ -10634,7 +10634,7 @@ label.staff-inline-toggle.aiv-field { flex-direction:row; align-items:center; }
.ov-conn-pill[data-state="connected"] .ov-conn-dot { background: var(--success); }
.ov-conn-pill[data-state="connected"] .ov-conn-dot { background: var(--success); }
@keyframes ovConnPulse { 50% { transform: scale(0.55); opacity: 0.5; } }
@keyframes ovConnPulse { 50% { transform: scale(0.55); opacity: 0.5; } }
.chat-conn-status { font-style: italic; opacity: 0.85; }
.chat-conn-status { font-style: italic; opacity: 0.85; }
-.chat-conn-status[data-state="connected"] { color: var(--success); }
+.chat-conn-status[data-state="connected"] { color: var(--success-text, var(--success)); }
@media (prefers-reduced-motion: reduce) {
@media (prefers-reduced-motion: reduce) {
.ov-conn-pill { transition: opacity var(--motion-fast) linear; transform: translate3d(-50%, 0, 0); }
.ov-conn-pill { transition: opacity var(--motion-fast) linear; transform: translate3d(-50%, 0, 0); }
.ov-conn-pill .ov-conn-dot { animation: none !important; }
.ov-conn-pill .ov-conn-dot { animation: none !important; }
@@ -97,7 +97,7 @@
@@ -97,7 +97,7 @@
.ov-route-skel span:nth-child(3){height:120px;animation-delay:.2s}
.ov-route-skel span:nth-child(3){height:120px;animation-delay:.2s}
@keyframes ovRouteSkel{from{opacity:.55}to{opacity:1}}
@keyframes ovRouteSkel{from{opacity:.55}to{opacity:1}}
.ov-route-error{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin:24px auto;max-width:640px;padding:16px 18px;border-radius:14px;border:1px solid color-mix(in srgb,var(--danger,#ef4444) 40%,transparent);background:color-mix(in srgb,var(--danger,#ef4444) 10%,var(--bg-card,#171826))}
.ov-route-error{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin:24px auto;max-width:640px;padding:16px 18px;border-radius:14px;border:1px solid color-mix(in srgb,var(--danger,#ef4444) 40%,transparent);background:color-mix(in srgb,var(--danger,#ef4444) 10%,var(--bg-card,#171826))}
- .ov-route-error>i{font-size:1.4rem;color:var(--danger,#ef4444)}
+ .ov-route-error>i{font-size:1.4rem;color:var(--danger-text, var(--danger,#ef4444))}
.ov-route-error>div{flex:1;min-width:180px;display:grid;gap:2px}
.ov-route-error>div{flex:1;min-width:180px;display:grid;gap:2px}
.ov-route-error span{color:var(--text-muted,#8b93ad);font-size:.9rem}
.ov-route-error span{color:var(--text-muted,#8b93ad);font-size:.9rem}
@media (prefers-reduced-motion:reduce){.ov-route-skel span{animation:none}}
@media (prefers-reduced-motion:reduce){.ov-route-skel span{animation:none}}
@@ -2173,7 +2173,7 @@ function createManagedStreamModal() {
@@ -2173,7 +2173,7 @@ function createManagedStreamModal() {
</button>
</button>
<button class="btn btn-outline" onclick="closeModal()" style="flex:1">Cancel</button>
<button class="btn btn-outline" onclick="closeModal()" style="flex:1">Cancel</button>
</div>
</div>
- <p id="cms-error" style="display:none;color:var(--danger);margin-top:8px;font-size:0.85rem"></p>`;
+ <p id="cms-error" style="display:none;color:var(--danger-text, var(--danger));margin-top:8px;font-size:0.85rem"></p>`;
}
}
function _cmsSelectMethod(method) {
function _cmsSelectMethod(method) {
@@ -1204,7 +1204,7 @@ function _wsConfirmUnsaved(message) {
@@ -1204,7 +1204,7 @@ function _wsConfirmUnsaved(message) {
overlay.className = 'bc-ws-confirm-overlay';
overlay.className = 'bc-ws-confirm-overlay';
overlay.innerHTML = `
overlay.innerHTML = `
<div class="bc-ws-confirm-dialog">
<div class="bc-ws-confirm-dialog">
- <h3><i class="fa-solid fa-triangle-exclamation" style="color:var(--warning)"></i> Unsaved Changes</h3>
+ <h3><i class="fa-solid fa-triangle-exclamation" style="color:var(--warning-text, var(--warning))"></i> Unsaved Changes</h3>
<p>${esc(message || 'You have unsaved changes.')}</p>
<p>${esc(message || 'You have unsaved changes.')}</p>
<div class="bc-ws-confirm-actions">
<div class="bc-ws-confirm-actions">
<button class="btn btn-small" id="bc-ws-confirm-cancel">Cancel</button>
<button class="btn btn-small" id="bc-ws-confirm-cancel">Cancel</button>
@@ -1235,7 +1235,7 @@ function _wsConfirmAction(message, { title = 'Are you sure?', okLabel = 'Confirm
@@ -1235,7 +1235,7 @@ function _wsConfirmAction(message, { title = 'Are you sure?', okLabel = 'Confirm
overlay.className = 'bc-ws-confirm-overlay';
overlay.className = 'bc-ws-confirm-overlay';
overlay.innerHTML = `
overlay.innerHTML = `
<div class="bc-ws-confirm-dialog">
<div class="bc-ws-confirm-dialog">
- <h3><i class="fa-solid fa-triangle-exclamation" style="color:var(--warning)"></i> ${esc(title)}</h3>
+ <h3><i class="fa-solid fa-triangle-exclamation" style="color:var(--warning-text, var(--warning))"></i> ${esc(title)}</h3>
<p>${esc(message)}</p>
<p>${esc(message)}</p>
<div class="bc-ws-confirm-actions">
<div class="bc-ws-confirm-actions">
<button class="btn btn-small" id="bc-ws-confirm-cancel">Cancel</button>
<button class="btn btn-small" id="bc-ws-confirm-cancel">Cancel</button>
@@ -2566,7 +2566,7 @@ function _wsRenderSlotRsCard() {
@@ -2566,7 +2566,7 @@ function _wsRenderSlotRsCard() {
<button class="btn btn-small btn-outline" onclick="_wsEditSlotRs()" title="Edit">
<button class="btn btn-small btn-outline" onclick="_wsEditSlotRs()" title="Edit">
<i class="fa-solid fa-pen"></i>
<i class="fa-solid fa-pen"></i>
</button>
</button>
- <button class="btn btn-small btn-outline" style="color:var(--danger)" onclick="_wsDeleteSlotRs()" title="Delete">
+ <button class="btn btn-small btn-outline" style="color:var(--danger-text, var(--danger))" onclick="_wsDeleteSlotRs()" title="Delete">
<i class="fa-solid fa-trash"></i>
<i class="fa-solid fa-trash"></i>
</button>
</button>
</div>
</div>
@@ -2616,7 +2616,7 @@ function _wsRenderRestreamList(container) {
@@ -2616,7 +2616,7 @@ function _wsRenderRestreamList(container) {
<button class="btn btn-small btn-outline" onclick="_wsEditRestreamDest(${d.id})" title="Edit">
<button class="btn btn-small btn-outline" onclick="_wsEditRestreamDest(${d.id})" title="Edit">
<i class="fa-solid fa-pen"></i>
<i class="fa-solid fa-pen"></i>
</button>
</button>
- <button class="btn btn-small btn-outline" style="color:var(--danger)" onclick="_wsDeleteRestreamDest(${d.id})" title="Delete">
+ <button class="btn btn-small btn-outline" style="color:var(--danger-text, var(--danger))" onclick="_wsDeleteRestreamDest(${d.id})" title="Delete">
<i class="fa-solid fa-trash"></i>
<i class="fa-solid fa-trash"></i>
</button>
</button>
</div>
</div>
@@ -3101,7 +3101,7 @@ function _wsRenderRestreamConnect(platform) {
@@ -3101,7 +3101,7 @@ function _wsRenderRestreamConnect(platform) {
<i class="fa-solid fa-circle-check" style="color:#53fc18"></i>
<i class="fa-solid fa-circle-check" style="color:#53fc18"></i>
<span style="flex:1"></span>
<span style="flex:1"></span>
<button class="btn btn-small btn-outline" type="button" onclick="_wsConnectPlatform('${platform}')" title="Reconnect"><i class="fa-solid fa-rotate"></i></button>
<button class="btn btn-small btn-outline" type="button" onclick="_wsConnectPlatform('${platform}')" title="Reconnect"><i class="fa-solid fa-rotate"></i></button>
- <button class="btn btn-small btn-outline" type="button" style="color:var(--danger)" onclick="_wsDisconnectPlatform('${platform}')"><i class="fa-solid fa-link-slash"></i> Disconnect</button>
+ <button class="btn btn-small btn-outline" type="button" style="color:var(--danger-text, var(--danger))" onclick="_wsDisconnectPlatform('${platform}')"><i class="fa-solid fa-link-slash"></i> Disconnect</button>
</div>
</div>
<p class="muted" style="font-size:0.75rem;margin:6px 0 0">${providesKey
<p class="muted" style="font-size:0.75rem;margin:6px 0 0">${providesKey
? 'Your ingest URL & stream key are filled in automatically — just save.'
? 'Your ingest URL & stream key are filled in automatically — just save.'
@@ -5818,7 +5818,7 @@ async function adminToolsIpBanAll(ip, username) {
@@ -5818,7 +5818,7 @@ async function adminToolsIpBanAll(ip, username) {
// Refresh the admin tools panel if still open
// Refresh the admin tools panel if still open
const body = document.querySelector('.admin-tools-body');
const body = document.querySelector('.admin-tools-body');
if (body) {
if (body) {
- body.innerHTML = '<div class="admin-tools-loading"><i class="fa-solid fa-check" style="color:var(--success)"></i> Ban applied. Close and reopen to refresh.</div>';
+ body.innerHTML = '<div class="admin-tools-loading"><i class="fa-solid fa-check" style="color:var(--success-text, var(--success))"></i> Ban applied. Close and reopen to refresh.</div>';
}
}
} catch (e) {
} catch (e) {
toast(e.message || 'Ban failed', 'error');
toast(e.message || 'Ban failed', 'error');
@@ -1006,7 +1006,7 @@ async function loadDashTokens() {
@@ -1006,7 +1006,7 @@ async function loadDashTokens() {
const created = t.created_at ? new Date(t.created_at).toLocaleDateString() : 'Unknown';
const created = t.created_at ? new Date(t.created_at).toLocaleDateString() : 'Unknown';
const lastUsed = t.last_used_at ? new Date(t.last_used_at).toLocaleDateString() : 'Never';
const lastUsed = t.last_used_at ? new Date(t.last_used_at).toLocaleDateString() : 'Never';
const expires = t.expires_at ? new Date(t.expires_at).toLocaleDateString() : 'Never';
const expires = t.expires_at ? new Date(t.expires_at).toLocaleDateString() : 'Never';
- const statusClass = t.is_active ? 'color:var(--success)' : 'color:var(--danger)';
+ const statusClass = t.is_active ? 'color:var(--success-text, var(--success))' : 'color:var(--danger-text, var(--danger))';
const statusLabel = t.is_active ? 'Active' : 'Revoked';
const statusLabel = t.is_active ? 'Active' : 'Revoked';
return `<div style="display:flex;align-items:center;gap:8px;padding:6px 10px;background:var(--bg-secondary);border-radius:6px;border:1px solid var(--border)">
return `<div style="display:flex;align-items:center;gap:8px;padding:6px 10px;background:var(--bg-secondary);border-radius:6px;border:1px solid var(--border)">
<div style="flex:1;min-width:0">
<div style="flex:1;min-width:0">
@@ -1184,7 +1184,7 @@ async function loadDashChatLogs(page) {
@@ -1184,7 +1184,7 @@ async function loadDashChatLogs(page) {
pagination.innerHTML = '';
pagination.innerHTML = '';
}
}
} catch (e) {
} catch (e) {
- results.innerHTML = `<p class="muted" style="color:var(--danger)">Failed to load chat logs: ${esc(e.message)}</p>`;
+ results.innerHTML = `<p class="muted" style="color:var(--danger-text, var(--danger))">Failed to load chat logs: ${esc(e.message)}</p>`;
}
}
}
}
@@ -238,7 +238,7 @@ async function loadPasteViewer(slug) {
@@ -238,7 +238,7 @@ async function loadPasteViewer(slug) {
if (p.burned || (p.burn_after_read && p.views > 1)) {
if (p.burned || (p.burn_after_read && p.views > 1)) {
container.innerHTML = `
container.innerHTML = `
<div class="paste-burned">
<div class="paste-burned">
- <i class="fa-solid fa-fire" style="font-size:3rem; color:var(--danger); margin-bottom:16px;"></i>
+ <i class="fa-solid fa-fire" style="font-size:3rem; color:var(--danger-text, var(--danger)); margin-bottom:16px;"></i>
<h2>This paste has been burned</h2>
<h2>This paste has been burned</h2>
<p>It was set to self-destruct after being read.</p>
<p>It was set to self-destruct after being read.</p>
<button class="btn btn-primary" onclick="navigate('/pastes')">Back to Pastes</button>
<button class="btn btn-primary" onclick="navigate('/pastes')">Back to Pastes</button>
@@ -251,7 +251,7 @@ async function loadPasteViewer(slug) {
@@ -251,7 +251,7 @@ async function loadPasteViewer(slug) {
if (p.is_nsfw && !nsfwDismissed) {
if (p.is_nsfw && !nsfwDismissed) {
container.innerHTML = `
container.innerHTML = `
<div class="paste-nsfw-gate">
<div class="paste-nsfw-gate">
- <i class="fa-solid fa-triangle-exclamation" style="font-size:3rem; color:var(--warning, #f39c12); margin-bottom:16px;"></i>
+ <i class="fa-solid fa-triangle-exclamation" style="font-size:3rem; color:var(--warning-text, var(--warning, #f39c12)); margin-bottom:16px;"></i>
<h2>NSFW Content</h2>
<h2>NSFW Content</h2>
<p>This paste has been marked as containing content that may not be suitable for all audiences.</p>
<p>This paste has been marked as containing content that may not be suitable for all audiences.</p>
<div style="display:flex;gap:12px;margin-top:16px;">
<div style="display:flex;gap:12px;margin-top:16px;">
@@ -422,7 +422,7 @@ async function loadPasteViewer(slug) {
@@ -422,7 +422,7 @@ async function loadPasteViewer(slug) {
const isMissing = /not found/i.test(err && err.message || '');
const isMissing = /not found/i.test(err && err.message || '');
container.innerHTML = `
container.innerHTML = `
<div class="empty-state" style="text-align:center; padding:48px;">
<div class="empty-state" style="text-align:center; padding:48px;">
- <i class="fa-solid fa-circle-exclamation" style="font-size:2rem; color:var(--danger); margin-bottom:12px;"></i>
+ <i class="fa-solid fa-circle-exclamation" style="font-size:2rem; color:var(--danger-text, var(--danger)); margin-bottom:12px;"></i>
<h3>${isMissing ? 'Paste not found' : 'Couldn\u2019t display this paste'}</h3>
<h3>${isMissing ? 'Paste not found' : 'Couldn\u2019t display this paste'}</h3>
<p>${isMissing
<p>${isMissing
? 'It may have been deleted or the link is invalid.'
? 'It may have been deleted or the link is invalid.'
@@ -91,7 +91,7 @@
@@ -91,7 +91,7 @@
.pc-msg { padding: 2px 0; word-break: break-word; }
.pc-msg { padding: 2px 0; word-break: break-word; }
.pc-msg.system { color: var(--text-muted, #888); font-style: italic; font-size: 0.75rem; }
.pc-msg.system { color: var(--text-muted, #888); font-style: italic; font-size: 0.75rem; }
.pc-msg.deleted { opacity: 0.4; text-decoration: line-through; font-size: 0.75rem; }
.pc-msg.deleted { opacity: 0.4; text-decoration: line-through; font-size: 0.75rem; }
- .pc-msg.error { color: var(--danger, #e05555); font-size: 0.75rem; }
+ .pc-msg.error { color: var(--danger-text, var(--danger, #e05555)); font-size: 0.75rem; }
.pc-user-name-tag { font-weight: 600; cursor: default; }
.pc-user-name-tag { font-weight: 600; cursor: default; }
.pc-time { font-size: 0.68rem; color: var(--text-muted, #888); margin-right: 3px; }
.pc-time { font-size: 0.68rem; color: var(--text-muted, #888); margin-right: 3px; }
.pc-stream-badge {
.pc-stream-badge {
@@ -99,7 +99,7 @@
@@ -99,7 +99,7 @@
padding: 1px 4px; border-radius: 3px; margin-right: 4px;
padding: 1px 4px; border-radius: 3px; margin-right: 4px;
}
}
.pc-badge-admin { font-size: 0.6rem; color: var(--accent, #8b5cf6); margin-right: 2px; }
.pc-badge-admin { font-size: 0.6rem; color: var(--accent, #8b5cf6); margin-right: 2px; }
- .pc-badge-mod { font-size: 0.6rem; color: var(--success, #55e090); margin-right: 2px; }
+ .pc-badge-mod { font-size: 0.6rem; color: var(--success-text, var(--success, #55e090)); margin-right: 2px; }
.pc-emote { height: 1.2em; vertical-align: middle; }
.pc-emote { height: 1.2em; vertical-align: middle; }
/* ── Input ── */
/* ── Input ── */
@@ -139,7 +139,7 @@
@@ -139,7 +139,7 @@
flex-shrink: 0;
flex-shrink: 0;
line-height: 1.7;
line-height: 1.7;
}
}
- .rule-list li.no .rule-icon { color: var(--danger); }
+ .rule-list li.no .rule-icon { color: var(--danger-text, var(--danger)); }
.rule-list li.yes .rule-icon { color: #2ecc71; }
.rule-list li.yes .rule-icon { color: #2ecc71; }
.rule-list li strong { color: var(--text); }
.rule-list li strong { color: var(--text); }
@@ -139,7 +139,7 @@
@@ -139,7 +139,7 @@
flex-shrink: 0;
flex-shrink: 0;
line-height: 1.7;
line-height: 1.7;
}
}
- .rule-list li.no .rule-icon { color: var(--danger); }
+ .rule-list li.no .rule-icon { color: var(--danger-text, var(--danger)); }
.rule-list li.yes .rule-icon { color: #2ecc71; }
.rule-list li.yes .rule-icon { color: #2ecc71; }
.rule-list li strong { color: var(--text); }
.rule-list li strong { color: var(--text); }