Rebrand via Tailwind theme vars; hide signup prompt via :has() + observer; sync yaml with volume fix

This commit is contained in:
Nathan Schneider committed 2026-10-18 22:36:57 -06:00
1 parent a4855aba2f
commit 03e6baf3df
4 files changed
+76 -100

No files matched your search

+46 -32
View File
@@ -1,51 +1,65 @@
/* Co‑op branding colors */
:root {
--brand-primary-rgb: 91,140,90; /* green */
--brand-surface-rgb: 250,248,245;/* cream */
/* ============================================================
Inference Co-op branding — LibreChat overlay (v2, DOM-verified)
LibreChat's Tailwind theme resolves every color through CSS
variables set on html.light / html.dark (space-separated RGB).
Overriding those variables rebrands the WHOLE app — login page,
chat UI, dialogs — through the existing theme system.
============================================================ */
html.light {
--surface-primary: 250 248 245; /* cream background */
--surface-secondary: 241 237 230;
--surface-tertiary: 232 227 217;
--surface-hover: 236 234 217;
--surface-submit: 91 140 90; /* co-op green */
--surface-submit-hover: 74 122 74;
--accent-primary: 91 140 90;
--accent-primary-hover: 74 122 74;
--ring-primary: 91 140 90;
--link: 74 122 74;
--text-primary: 36 48 32;
--text-secondary: 90 107 82;
--border-light: 213 221 208;
}
/* Primary‑color UI */
button,
.primary,
.MuiButton-contained,
.ant-btn-primary {
background-color: rgb(var(--brand-primary-rgb)) !important;
border-color: rgb(var(--brand-primary-rgb)) !important;
html.dark {
--surface-primary: 31 36 27;
--surface-secondary: 38 45 34;
--surface-tertiary: 46 54 40;
--surface-hover: 49 57 45;
--surface-submit: 122 184 122;
--surface-submit-hover: 142 200 142;
--accent-primary: 122 184 122;
--accent-primary-hover: 142 200 142;
--ring-primary: 142 200 142;
--link: 142 200 142;
--text-primary: 236 233 226;
--text-secondary: 168 173 158;
--border-light: 74 82 64;
}
/* Surface background */
body,
.appContainer,
.chatContainer,
.login-page {
background-color: rgb(var(--brand-surface-rgb)) !important;
/* ---- Remove the "Don't have an account? Sign up" line ----
The <p> wraps the register link on auth pages. :has() hides the
whole paragraph (custom2.js is the MutationObserver fallback). */
p:has(> a[href*="register"]) {
display: none !important;
}
/* Hide any registration / external‑account UI */
/* Belt-and-braces: hide any residual register/signup links */
a[href*="register"],
a[href*="signup"],
.register-link,
.signup-link {
a[href*="signup"] {
display: none !important;
}
/* Ensure text on login page uses branding colors */
.login-page, .login-page * {
color: rgb(36,48,32) !important;
}
/* ---- Footer: simple centered link to the co-op homepage ---- */
footer {
text-align: center;
padding: 1rem;
}
footer::before {
content: "© Inference Co‑op – ";
content: "© Inference Co-op – ";
}
footer::after {
content: "inference.coop";
color: rgb(var(--brand-primary-rgb));
color: rgb(var(--accent-primary));
cursor: pointer;
}
footer::after:hover {
text-decoration: underline;
}
+27 -15
View File
@@ -1,16 +1,28 @@
// Auto-load saved image‑generation API key into the MCP input field.
// No prompt is shown; if a key is stored in localStorage it is auto‑filled.
window.addEventListener('load', () => {
const savedKey = localStorage.getItem('image_api_key');
if (savedKey) {
const icInput = document.querySelector('input[name=\"IC_API_KEY\"]');
if (icInput) icInput.value = savedKey;
// Co-op login-page polish.
// The auth form is client-rendered (React), so a plain `load` listener runs
// too early — a MutationObserver re-checks on every DOM change instead.
(function () {
function hideSignupPrompt() {
document.querySelectorAll('p').forEach(function (p) {
var link = p.querySelector('a[href*="register"]');
var text = (p.textContent || '');
if (link || text.indexOf("Don't have an account") !== -1) {
p.style.display = 'none';
}
});
}
// Hide "Don't have an account?" text on the login page
const nodes = document.querySelectorAll('p, span, div');
nodes.forEach(node => {
if (node.textContent && node.textContent.includes("Don't have an account")) {
node.style.display = 'none';
}
});
});
function start() {
hideSignupPrompt();
new MutationObserver(hideSignupPrompt).observe(document.body, {
childList: true,
subtree: true,
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', start);
} else {
start();
}
})();
-50
View File
@@ -1,50 +0,0 @@
/* Co‑op branding colors */
:root {
--brand-primary-rgb: 91,140,90; /* green */
--brand-surface-rgb: 250,248,245;/* cream */
}
/* Primary‑color UI */
button,
.MuiButton-contained,
.ant-btn-primary {
background-color: rgb(var(--brand-primary-rgb)) !important;
border-color: rgb(var(--brand-primary-rgb)) !important;
}
/* Surface background */
body,
.appContainer,
.chatContainer,
.login-page {
background-color: rgb(var(--brand-surface-rgb)) !important;
}
/* Hide any registration / external‑account UI */
a[href*="register"],
a[href*="signup"],
.register-link,
.signup-link {
display: none !important;
}
/* Ensure text on login page uses branding colors */
.login-page, .login-page * {
color: rgb(36,48,32) !important;
}
footer {
text-align: center;
padding: 1rem;
}
footer::before {
content: "© Inference Co‑op – ";
}
footer::after {
content: "inference.coop";
color: rgb(var(--brand-primary-rgb));
cursor: pointer;
}
footer::after:hover {
text-decoration: underline;
}