|
|
@@ -0,0 +1,229 @@
|
|
|
+/* ── Theme tokens — driven by ancestor Material M2 theme class ─────────────── */
|
|
|
+/* Default resolves to dark-theme (indigo dark baseline) */
|
|
|
+
|
|
|
+:host {
|
|
|
+ --chat-bg: #121212;
|
|
|
+ --chat-header-bg: #283593; /* indigo 800 — dark-readable primary */
|
|
|
+ --chat-surface: #1e1e1e;
|
|
|
+ --chat-border: rgba(255, 255, 255, 0.08);
|
|
|
+ --chat-text: rgba(255, 255, 255, 0.87);
|
|
|
+ --chat-text-sub: rgba(255, 255, 255, 0.45);
|
|
|
+ --chat-user-bg: rgba(63, 81, 181, 0.32);
|
|
|
+ --chat-user-fg: #e8eaf6;
|
|
|
+ --chat-bot-bg: rgba(255, 255, 255, 0.05);
|
|
|
+ --chat-bot-fg: rgba(255, 255, 255, 0.72);
|
|
|
+ --chat-accent: #7986cb; /* indigo 300 */
|
|
|
+ --chat-header-fg: #ffffff;
|
|
|
+ --chat-muted: rgba(255, 255, 255, 0.28);
|
|
|
+
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ height: 100%;
|
|
|
+ overflow: hidden;
|
|
|
+ background: var(--chat-bg);
|
|
|
+ color: var(--chat-text);
|
|
|
+}
|
|
|
+
|
|
|
+:host-context(.dark-theme) {
|
|
|
+ /* matches the default block above — explicit for clarity */
|
|
|
+ --chat-bg: #121212;
|
|
|
+ --chat-header-bg: #283593;
|
|
|
+ --chat-surface: #1e1e1e;
|
|
|
+ --chat-border: rgba(255, 255, 255, 0.08);
|
|
|
+ --chat-text: rgba(255, 255, 255, 0.87);
|
|
|
+ --chat-text-sub: rgba(255, 255, 255, 0.45);
|
|
|
+ --chat-user-bg: rgba(63, 81, 181, 0.32);
|
|
|
+ --chat-user-fg: #e8eaf6;
|
|
|
+ --chat-bot-bg: rgba(255, 255, 255, 0.05);
|
|
|
+ --chat-bot-fg: rgba(255, 255, 255, 0.72);
|
|
|
+ --chat-accent: #7986cb;
|
|
|
+ --chat-header-fg: #ffffff;
|
|
|
+ --chat-muted: rgba(255, 255, 255, 0.28);
|
|
|
+}
|
|
|
+
|
|
|
+:host-context(.dark-theme-pink) {
|
|
|
+ --chat-bg: #120e14;
|
|
|
+ --chat-header-bg: #880e4f; /* pink 900 */
|
|
|
+ --chat-surface: #1e1520;
|
|
|
+ --chat-border: rgba(255, 255, 255, 0.08);
|
|
|
+ --chat-text: rgba(255, 255, 255, 0.87);
|
|
|
+ --chat-text-sub: rgba(255, 255, 255, 0.45);
|
|
|
+ --chat-user-bg: rgba(233, 30, 99, 0.28);
|
|
|
+ --chat-user-fg: #fce4ec;
|
|
|
+ --chat-bot-bg: rgba(255, 255, 255, 0.05);
|
|
|
+ --chat-bot-fg: rgba(255, 255, 255, 0.72);
|
|
|
+ --chat-accent: #f48fb1; /* pink 200 */
|
|
|
+ --chat-header-fg: #ffffff;
|
|
|
+ --chat-muted: rgba(255, 255, 255, 0.28);
|
|
|
+}
|
|
|
+
|
|
|
+:host-context(.theme) {
|
|
|
+ --chat-bg: #f5f5f7;
|
|
|
+ --chat-header-bg: #3f51b5; /* indigo 500 — matches toolbar */
|
|
|
+ --chat-surface: #ffffff;
|
|
|
+ --chat-border: rgba(0, 0, 0, 0.09);
|
|
|
+ --chat-text: rgba(0, 0, 0, 0.87);
|
|
|
+ --chat-text-sub: rgba(0, 0, 0, 0.54);
|
|
|
+ --chat-user-bg: #3f51b5;
|
|
|
+ --chat-user-fg: #ffffff;
|
|
|
+ --chat-bot-bg: #ffffff;
|
|
|
+ --chat-bot-fg: rgba(0, 0, 0, 0.75);
|
|
|
+ --chat-accent: #3f51b5;
|
|
|
+ --chat-header-fg: #ffffff;
|
|
|
+ --chat-muted: rgba(0, 0, 0, 0.36);
|
|
|
+}
|
|
|
+
|
|
|
+:host-context(.theme-pink) {
|
|
|
+ --chat-bg: #fdf0f4;
|
|
|
+ --chat-header-bg: #c2185b; /* pink 700 — matches toolbar */
|
|
|
+ --chat-surface: #ffffff;
|
|
|
+ --chat-border: rgba(0, 0, 0, 0.09);
|
|
|
+ --chat-text: rgba(0, 0, 0, 0.87);
|
|
|
+ --chat-text-sub: rgba(0, 0, 0, 0.54);
|
|
|
+ --chat-user-bg: #c2185b;
|
|
|
+ --chat-user-fg: #ffffff;
|
|
|
+ --chat-bot-bg: #ffffff;
|
|
|
+ --chat-bot-fg: rgba(0, 0, 0, 0.75);
|
|
|
+ --chat-accent: #c2185b;
|
|
|
+ --chat-header-fg: #ffffff;
|
|
|
+ --chat-muted: rgba(0, 0, 0, 0.36);
|
|
|
+}
|
|
|
+
|
|
|
+/* ── Shell ─────────────────────────────────────────────────────────────────── */
|
|
|
+
|
|
|
+.chat-shell {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ height: 100%;
|
|
|
+ overflow: hidden;
|
|
|
+}
|
|
|
+
|
|
|
+/* ── Header ────────────────────────────────────────────────────────────────── */
|
|
|
+
|
|
|
+.chat-header {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 10px;
|
|
|
+ padding: 10px 14px;
|
|
|
+ background: var(--chat-header-bg);
|
|
|
+ color: var(--chat-header-fg);
|
|
|
+ border-bottom: 1px solid var(--chat-border);
|
|
|
+ flex-shrink: 0;
|
|
|
+}
|
|
|
+
|
|
|
+.header-icon {
|
|
|
+ font-size: 20px;
|
|
|
+ height: 20px;
|
|
|
+ width: 20px;
|
|
|
+ opacity: 0.88;
|
|
|
+}
|
|
|
+
|
|
|
+.header-title {
|
|
|
+ font-size: 13px;
|
|
|
+ font-weight: 600;
|
|
|
+ letter-spacing: 0.4px;
|
|
|
+ flex: 1;
|
|
|
+}
|
|
|
+
|
|
|
+.session-tag {
|
|
|
+ font-size: 10px;
|
|
|
+ font-family: 'Courier New', monospace;
|
|
|
+ opacity: 0.55;
|
|
|
+ letter-spacing: 0.3px;
|
|
|
+ user-select: none;
|
|
|
+}
|
|
|
+
|
|
|
+.reset-btn {
|
|
|
+ color: var(--chat-header-fg) !important;
|
|
|
+ opacity: 0.75;
|
|
|
+
|
|
|
+ &:hover { opacity: 1; }
|
|
|
+}
|
|
|
+
|
|
|
+/* ── Feed ──────────────────────────────────────────────────────────────────── */
|
|
|
+
|
|
|
+.chat-feed {
|
|
|
+ flex: 1;
|
|
|
+ min-height: 0;
|
|
|
+ overflow-y: auto;
|
|
|
+ padding: 20px max(16px, calc((100% - 760px) / 2)) 12px;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ gap: 14px;
|
|
|
+ scrollbar-width: thin;
|
|
|
+ scrollbar-color: var(--chat-border) transparent;
|
|
|
+}
|
|
|
+
|
|
|
+/* ── Message bubbles ───────────────────────────────────────────────────────── */
|
|
|
+
|
|
|
+.chat-msg {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ gap: 4px;
|
|
|
+ align-items: flex-start;
|
|
|
+
|
|
|
+ &.chat-msg--user { align-items: flex-end; }
|
|
|
+}
|
|
|
+
|
|
|
+.chat-msg__label {
|
|
|
+ font-size: 9.5px;
|
|
|
+ font-weight: 600;
|
|
|
+ text-transform: uppercase;
|
|
|
+ letter-spacing: 0.7px;
|
|
|
+ color: var(--chat-muted);
|
|
|
+}
|
|
|
+
|
|
|
+.chat-msg__bubble {
|
|
|
+ max-width: min(88%, 600px);
|
|
|
+ padding: 10px 14px;
|
|
|
+ border-radius: 14px;
|
|
|
+ font-size: 13.5px;
|
|
|
+ line-height: 1.65;
|
|
|
+ white-space: pre-wrap;
|
|
|
+ word-break: break-word;
|
|
|
+
|
|
|
+ .chat-msg--user & {
|
|
|
+ background: var(--chat-user-bg);
|
|
|
+ color: var(--chat-user-fg);
|
|
|
+ border-bottom-right-radius: 3px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .chat-msg:not(.chat-msg--user) & {
|
|
|
+ background: var(--chat-bot-bg);
|
|
|
+ color: var(--chat-bot-fg);
|
|
|
+ border: 1px solid var(--chat-border);
|
|
|
+ border-bottom-left-radius: 3px;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.chat-thinking {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 9px;
|
|
|
+ font-size: 12px;
|
|
|
+ color: var(--chat-text-sub);
|
|
|
+ padding: 2px 0;
|
|
|
+}
|
|
|
+
|
|
|
+/* ── Composer ──────────────────────────────────────────────────────────────── */
|
|
|
+
|
|
|
+.chat-composer {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 4px;
|
|
|
+ padding: 8px max(10px, calc((100% - 760px) / 2));
|
|
|
+ border-top: 1px solid var(--chat-border);
|
|
|
+ background: var(--chat-surface);
|
|
|
+ flex-shrink: 0;
|
|
|
+}
|
|
|
+
|
|
|
+.chat-input {
|
|
|
+ flex: 1;
|
|
|
+}
|
|
|
+
|
|
|
+.send-btn {
|
|
|
+ color: var(--chat-accent) !important;
|
|
|
+ flex-shrink: 0;
|
|
|
+
|
|
|
+ &[disabled] { color: var(--chat-muted) !important; }
|
|
|
+}
|