Files
vocero-client/vocero-frontend/src/styles/theme.css
T

162 lines
5.7 KiB
CSS

/* Palette values switch with server configuration; utilities resolve them at use time. */
@custom-variant white (&:where([data-theme="white"], [data-theme="white"] *));
@custom-variant dark (&:where([data-theme="dark"], [data-theme="dark"] *));
@custom-variant compact (@media (max-width: 600px));
@custom-variant short (@media (max-height: 640px));
@theme inline {
--color-surface: var(--bg);
--color-surface-raised: var(--bg-elev);
--color-surface-overlay: var(--bg-elev-2);
--color-foreground: var(--text);
--color-muted: var(--text-dim);
--color-faint: var(--text-faint);
--color-line: var(--border);
--color-line-strong: var(--border-strong);
--color-brand: var(--brand);
--color-brand-secondary: var(--brand-2);
--color-brand-tertiary: var(--brand-3);
--color-accent: var(--accent);
--color-accent-secondary: var(--accent-2);
--color-listening: var(--listening);
--color-speaking: var(--speaking);
--color-processing: var(--processing);
--color-error: var(--error);
--color-success: var(--success);
--color-voice-user: var(--voice-user);
--color-voice-assistant: var(--voice-assistant);
--color-voice-tool: var(--voice-tool);
--radius-control: var(--app-radius-control);
--radius-panel: var(--app-radius-panel);
--radius-card: var(--app-radius-card);
--shadow-panel: var(--shadow-soft);
--shadow-brand: var(--shadow-glow-brand);
--shadow-card-glass: var(--shadow-glass);
}
@theme {
--font-sans: "Inter", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
--font-mono: "Geist Mono", ui-monospace, SFMono-Regular, "SF Mono", Menlo, monospace;
}
@layer base {
:root {
--bg: #07080d;
--bg-elev: rgba(22, 25, 37, 0.55);
--bg-elev-2: rgba(31, 35, 52, 0.55);
--border: rgba(255, 255, 255, 0.08);
--border-strong: rgba(255, 255, 255, 0.16);
--glass: rgba(18, 20, 30, 0.45);
--glass-strong: rgba(18, 20, 30, 0.62);
--text: #f5f6fa;
--text-dim: rgba(245, 246, 250, 0.7);
--text-faint: rgba(245, 246, 250, 0.48);
--brand: #8b5cf6;
--brand-2: #ec4899;
--brand-3: #22d3ee;
--accent: #a78bfa;
--accent-2: #22d3ee;
--listening: #22d3ee;
--speaking: #a78bfa;
--processing: #fbbf24;
--error: #ff6a75;
--success: #34d399;
--brand-gradient: linear-gradient(135deg, #8b5cf6 0%, #ec4899 50%, #22d3ee 100%);
--brand-soft-gradient: linear-gradient(
135deg,
color-mix(in srgb, #8b5cf6 55%, transparent),
color-mix(in srgb, #ec4899 48%, transparent) 55%,
color-mix(in srgb, #22d3ee 55%, transparent)
);
--voice-user: var(--accent-2);
--voice-assistant: var(--accent);
--voice-tool: var(--processing);
--app-radius-control: 10px;
--app-radius-panel: 16px;
--app-radius-card: 26px;
--shadow-soft: 0 10px 40px rgba(0, 0, 0, 0.35);
--shadow-glow-brand:
0 0 40px -10px color-mix(in srgb, var(--brand) 60%, transparent),
0 0 80px -30px color-mix(in srgb, var(--brand-2) 55%, transparent);
--shadow-glass: 0 8px 40px rgba(0, 0, 0, 0.32), 0 2px 8px rgba(0, 0, 0, 0.18);
--message-user-background: linear-gradient(
180deg,
color-mix(in srgb, var(--voice-user) 10%, var(--bg-elev-2)),
color-mix(in srgb, var(--voice-user) 6%, var(--bg-elev-2))
)
padding-box;
--message-assistant-background: linear-gradient(
180deg,
color-mix(in srgb, var(--voice-assistant) 10%, var(--bg-elev-2)),
color-mix(in srgb, var(--voice-assistant) 5%, var(--bg-elev-2))
)
padding-box;
--message-user-border: color-mix(in srgb, var(--voice-user) 44%, var(--border));
--message-assistant-border: color-mix(in srgb, var(--voice-assistant) 42%, var(--border));
--message-user-shadow:
0 10px 28px rgb(0 0 0 / 0.28), 0 0 0 1px color-mix(in srgb, var(--voice-user) 16%, rgb(255 255 255 / 0.05)) inset,
0 0 28px -14px color-mix(in srgb, var(--voice-user) 66%, transparent);
--message-assistant-shadow:
0 10px 28px rgb(0 0 0 / 0.28),
0 0 0 1px color-mix(in srgb, var(--voice-assistant) 14%, rgb(255 255 255 / 0.05)) inset,
0 0 28px -14px color-mix(in srgb, var(--voice-assistant) 62%, transparent);
color-scheme: dark;
}
html[data-theme="white"] {
color-scheme: light;
--bg: #ffffff;
--bg-elev: #f8fafc;
--bg-elev-2: #f1f5f9;
--border: rgba(15, 23, 42, 0.08);
--border-strong: rgba(15, 23, 42, 0.16);
--glass: rgba(255, 255, 255, 0.85);
--glass-strong: rgba(248, 250, 252, 0.92);
--text: #0f172a;
--text-dim: rgba(15, 23, 42, 0.72);
--text-faint: rgba(15, 23, 42, 0.55);
--brand: #1f6feb;
--brand-2: #3b82f6;
--brand-3: #60a5fa;
--accent: #2563eb;
--accent-2: #3b82f6;
--listening: #2563eb;
--speaking: #1d4ed8;
--processing: #d97706;
--error: #dc2626;
--success: #16a34a;
--brand-gradient: linear-gradient(135deg, #2563eb 0%, #3b82f6 55%, #60a5fa 100%);
--brand-soft-gradient: linear-gradient(
135deg,
rgba(37, 99, 235, 0.18),
rgba(59, 130, 246, 0.14) 55%,
rgba(96, 165, 250, 0.18)
);
--voice-user: #2563eb;
--voice-assistant: #64748b;
--voice-tool: #d97706;
--shadow-soft: 0 6px 20px rgba(15, 23, 42, 0.06);
--shadow-glow-brand: 0 0 28px -6px rgba(37, 99, 235, 0.45), 0 0 60px -18px rgba(59, 130, 246, 0.4);
--shadow-glass: 0 2px 12px rgba(15, 23, 42, 0.06), 0 1px 3px rgba(15, 23, 42, 0.04);
--message-user-background: #dbeafe;
--message-assistant-background: #f3f4f6;
--message-user-border: transparent;
--message-assistant-border: transparent;
--message-user-shadow: none;
--message-assistant-shadow: none;
--app-radius-control: 10px;
--app-radius-panel: 16px;
--app-radius-card: 22px;
}
}