feat(frontend): terminal restyle + dm + grouping + brand override

- Restyle: ink 'blueprint' surfaces + IBM Plex Mono / Major Mono
  Display, hairline borders, restrained motion, 12px radii. Fabric
  purple accent kept. Layout unchanged.
- Brand override (build-time VITE_ only): VITE_APP_NAME / VITE_LOGO_URL
  / VITE_FAVICON_URL via src/lib/brand.ts (applyBrand in main.tsx);
  login wordmark/logo + title + favicon. .env.example documented.
- dm x-type: create modal participant becomes single-select (radio)
  for dm and forces private; member right-click menu gains 'Create
  new DM channel' (non-unique, fresh channel each time).
- Channels sidebar grouped by x-type with group headers.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
h z
2026-05-18 09:18:21 +01:00
parent 46cad0ec7c
commit 4892af55e8
7 changed files with 216 additions and 61 deletions

View File

@@ -1,28 +1,32 @@
:root {
--rail: #18191c;
--side: #1f2125;
--main: #26282d;
--elevated: #1a1b1e;
--input: #1a1b1e;
--hover: rgba(255, 255, 255, 0.04);
--active: rgba(168, 85, 247, 0.16);
/* Cryptic lab terminal: deep "blueprint" ink surfaces, monospace
everything, restrained motion. Accent stays Fabric purple. */
--ink: #080a0d;
--rail: #0b0e12;
--side: #0f141b;
--main: #0a0d12;
--elevated: #11161d;
--input: #0b0e12;
--hover: rgba(168, 85, 247, 0.1);
--active: rgba(168, 85, 247, 0.18);
--text: #dbdee1;
--text-muted: #949ba4;
--text-faint: #6d7178;
--text-h: #f2f3f5;
--text: #c7d0dc;
--text-muted: #6f7d92;
--text-faint: #4f5b6b;
--text-h: #e9f0fa;
--border: #303237;
--border: #1d2733;
--accent: #a855f7;
--accent-strong: #9333ea;
--accent-soft: rgba(168, 85, 247, 0.14);
--danger: #f23f42;
--accent-soft: rgba(168, 85, 247, 0.16);
--danger: #ff5a52;
--online: #23a55a;
--radius: 10px;
--radius-sm: 7px;
--sans: 'Inter', system-ui, 'Segoe UI', Roboto, sans-serif;
--mono: ui-monospace, 'SF Mono', Consolas, monospace;
--radius: 12px;
--radius-sm: 8px;
--display: 'Major Mono Display', ui-monospace, monospace;
--sans: 'IBM Plex Mono', ui-monospace, 'SF Mono', Consolas, monospace;
--mono: 'IBM Plex Mono', ui-monospace, 'SF Mono', Consolas, monospace;
color-scheme: dark;
font-synthesis: none;
@@ -198,6 +202,19 @@ button {
padding: 32px;
box-shadow: 0 20px 50px -20px rgba(0, 0, 0, 0.6);
}
.brand-wordmark {
font-family: var(--display);
text-transform: lowercase;
font-size: 30px;
color: var(--accent);
text-shadow: 0 0 32px rgba(168, 85, 247, 0.4);
margin-bottom: 18px;
}
.brand-logo {
max-height: 44px;
width: auto;
margin-bottom: 18px;
}
.login-card h1 {
font-size: 24px;
margin-bottom: 4px;
@@ -415,6 +432,20 @@ button {
.chan-btn.xt-custom {
--xt: #c084fc;
}
.chan-btn.xt-dm {
--xt: #a855f7;
}
/* x-type group headers in the channel sidebar */
.dc-chan-group {
margin-bottom: 6px;
}
.dc-group-label {
font-size: 10px;
letter-spacing: 0.18em;
text-transform: uppercase;
color: var(--text-faint);
padding: 8px 8px 4px;
}
.chan-tag {
margin-left: auto;
font-size: 10px;