/* ===== CONSOLIDATED CSS VARIABLES - ENHANCED DYNAMIC THEMING ===== */ :root { /* Core Theme Colors - Default Dark Theme Base */ --primary-color: #5e60ce; --primary-rgb: 94, 96, 206; --secondary-color: #23262f; --accent-color: #8b5cf6; --background-overlay: rgba(24, 26, 32, 0.85); --interface-opacity: 0.7; --gradient-start: #5e60ce; --gradient-end: #8b5cf6; --text-glow: 0 0 10px rgba(94, 96, 206, 0.3); --button-hover: rgba(94, 96, 206, 0.15); --animations-enabled: 1; --switch-color: #5e60ce; /* Contrast and Accessibility */ --contrast-ratio: 4.5; /* WCAG AA standard */ --text-on-primary: #ffffff; --text-on-secondary: #e0e0e0; --text-on-accent: #ffffff; --text-on-background: #e0e0e0; --border-opacity: 0.3; --hover-opacity: 0.15; --active-opacity: 0.25; /* UI Component Colors - Chat Interface */ --chat-bg: rgba(24, 26, 32, 0.95); --chat-text: var(--text-on-background); --chat-header-bg: rgba(255, 255, 255, 0.05); --chat-border: #5e60ce; --chat-input-bg: rgba(255, 255, 255, 0.1); --chat-input-text: var(--text-on-background); --chat-input-placeholder: rgba(255, 255, 255, 0.6); --chat-message-user-bg: #1e253c; --chat-message-user-text: var(--text-on-background); --chat-message-kimi-bg: #23262f; --chat-message-kimi-text: var(--text-on-background); /* Modal & Overlay Colors */ --modal-bg: rgba(24, 26, 32, 0.98); --modal-border: #5e60ce; --modal-header-bg: linear-gradient(135deg, #5e60ce, #8b5cf6); --modal-text: var(--text-on-background); --modal-title-color: #e0e0e0; --modal-overlay-bg: rgba(0, 0, 0, 0.8); --modal-close-hover-bg: rgba(255, 255, 255, 0.2); /* Settings Panel & Tabs */ --settings-bg: #0f1114; --settings-text: var(--text-on-background); --settings-tab-bg: #181a20; --settings-tab-color: #bfa6b6; --settings-tab-hover-bg: rgba(255, 255, 255, var(--hover-opacity)); --settings-tab-hover-color: rgba(255, 255, 255, 0.9); --settings-tab-active-bg: #5e60ce; --settings-tab-active-color: var(--text-on-primary); --settings-tab-border: #5e60ce; --settings-section-bg: #1a1d23; --settings-section-border: rgba(94, 96, 206, var(--border-opacity)); --settings-section-header-color: var(--text-on-background); /* Form Element Colors */ --input-bg: rgba(255, 255, 255, 0.1); --input-text: var(--text-on-background); --input-border: #5e60ce; --input-focus-bg: rgba(255, 255, 255, var(--hover-opacity)); --input-focus-border: #8b5cf6; --input-placeholder: rgba(255, 255, 255, 0.6); /* Button Colors */ --button-primary-bg: var(--primary-color); --button-primary-text: var(--text-on-primary); --button-primary-hover-bg: var(--accent-color); --button-secondary-bg: rgba(255, 255, 255, 0.05); --button-secondary-text: var(--text-on-background); --button-secondary-hover-bg: rgba(255, 255, 255, var(--hover-opacity)); --button-danger-bg: #e74c3c; --button-danger-text: #ffffff; --button-danger-hover-bg: #c0392b; /* Select & Dropdown Options */ --select-bg: var(--input-bg); --select-text: var(--input-text); --select-border: var(--input-border); --select-option-bg: rgba(24, 26, 32, 0.95); --select-option-text: var(--text-on-background); --select-option-hover-bg: #5e60ce; --select-option-hover-text: var(--text-on-primary); --select-option-checked-bg: #8b5cf6; --select-option-checked-text: var(--text-on-accent); --select-option-disabled-bg: rgba(24, 26, 32, 0.5); --select-option-disabled-text: #666; /* Slider Components */ --slider-track-bg: rgba(255, 255, 255, 0.1); --slider-track-active-bg: var(--primary-color); --slider-thumb-bg: var(--primary-color); --slider-thumb-hover-bg: var(--accent-color); --slider-value-bg: #0f1114; --slider-value-border: #5e60ce; --slider-value-color: var(--text-on-background); /* Toggle Switch */ --switch-bg-inactive: rgba(255, 255, 255, 0.05); --switch-bg-active: linear-gradient(90deg, #5e60ce, #8b5cf6); --switch-thumb-color: #ffffff; --switch-thumb-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); /* Mic Button & Pulse Effect */ --mic-button-bg: var(--button-hover); --mic-button-border: #5e60ce; --mic-button-shadow: 0 0 15px #5e60ce; --mic-button-hover-bg: #5e60ce; --mic-button-hover-shadow: 0 0 10px rgba(94, 96, 206, 0.5); --mic-button-icon-color: var(--text-on-primary); --mic-listening-border: #27ae60; --mic-listening-shadow: 0 0 15px #27ae60; --mic-pulse-color: rgba(39, 174, 96, 0.5); --mic-pulse-listening-color: rgba(39, 174, 96, 0.4); /* Video crossfade timing */ --video-fade-duration: 400ms; /* Cards & Stats */ --card-bg: rgba(255, 255, 255, 0.02); --card-border: rgba(255, 255, 255, 0.05); --card-hover-bg: rgba(255, 255, 255, 0.05); --card-text: var(--text-on-background); --stat-value-color: #8b5cf6; --stat-label-color: rgba(224, 224, 224, 0.7); /* Plugin Cards */ --plugin-card-bg: linear-gradient(135deg, #1a1d23 80%, rgba(24, 26, 32, 0.98) 100%); --plugin-card-border: #5e60ce; --plugin-card-title-color: var(--text-on-background); --plugin-card-desc-color: rgba(224, 224, 224, 0.7); --plugin-card-author-color: rgba(224, 224, 224, 0.5); --plugin-type-badge-bg: #8b5cf6; --plugin-type-badge-text: var(--text-on-accent); --plugin-active-badge-bg: linear-gradient(90deg, #5e60ce, #8b5cf6); --plugin-active-badge-text: var(--text-on-primary); /* Help Modal */ --help-modal-bg: rgba(24, 26, 32, 0.98); --help-modal-border: #5e60ce; --help-content-color: var(--text-on-background); --help-section-border: rgba(255, 255, 255, 0.1); --creator-card-bg: rgba(255, 255, 255, 0.02); --creator-card-border: rgba(255, 255, 255, 0.05); --creator-avatar-bg: linear-gradient(135deg, #5e60ce, #8b5cf6); --creator-name-color: #8b5cf6; --creator-role-bg: linear-gradient(135deg, #5e60ce, #8b5cf6); --creator-role-color: var(--text-on-primary); --philosophy-bg: rgba(94, 96, 206, 0.05); --philosophy-border: rgba(94, 96, 206, var(--border-opacity)); --philosophy-border-left: #5e60ce; --feature-item-bg: rgba(255, 255, 255, 0.02); --feature-item-border: rgba(94, 96, 206, var(--border-opacity)); --feature-icon-color: #8b5cf6; --feature-title-color: #8b5cf6; --feature-text-color: rgba(224, 224, 224, 0.7); --guide-step-bg: rgba(255, 255, 255, 0.02); --guide-step-number-bg: rgba(94, 96, 206, var(--hover-opacity)); --guide-step-number-color: var(--primary-color); --tip-item-bg: rgba(255, 255, 255, 0.02); --tip-item-border: var(--feature-item-border); /* Unified Scrollbar System */ --scrollbar-width: 8px !important; --scrollbar-track-bg: rgba(255, 255, 255, 0.02) !important; --scrollbar-thumb-bg: rgba(94, 96, 206, 0.4) !important; --scrollbar-thumb-hover-bg: rgba(94, 96, 206, 0.6) !important; --scrollbar-thumb-active-bg: rgba(94, 96, 206, 0.8) !important; --scrollbar-corner-bg: rgba(255, 255, 255, 0.05) !important; /* Model Colors */ --model-card-bg: rgba(255, 255, 255, 0.02); --model-card-border: rgba(255, 255, 255, 0.05); --model-card-hover-bg: rgba(255, 255, 255, 0.05); --model-card-selected-border: var(--primary-color); --model-card-selected-shadow: 0 0 0 2px rgba(94, 96, 206, var(--border-opacity)); --model-name-color: var(--text-on-background); --model-description-color: rgba(224, 224, 224, 0.7); --model-strength-color: #5e60ce; --model-strength-text: var(--text-on-primary); --model-provider-color: #8b5cf6; --model-provider-text: var(--text-on-accent); /* Text Colors */ --text-primary: var(--text-on-background); --text-secondary: #9ca3af; --text-muted: rgba(224, 224, 224, 0.6); /* Character Selection Colors */ --character-card-bg: rgba(255, 255, 255, 0.02); --character-card-border: rgba(255, 255, 255, 0.05); --character-card-hover-bg: rgba(255, 255, 255, 0.05); --character-selected-border: #8b5cf6; --character-selected-bg: rgba(94, 96, 206, 0.1); --character-name-color: var(--text-on-background); /* Waiting Indicator */ --waiting-indicator-color: var(--primary-color); --loading-spinner-color: var(--primary-color); /* Progress Bar */ --progress-bg: rgba(255, 255, 255, 0.05); --progress-fill-bg: linear-gradient(90deg, var(--primary-color), var(--accent-color)); --progress-text-color: var(--text-on-background); /* Transcript */ --transcript-bg: rgba(0, 0, 0, 0.9); --transcript-text: var(--text-on-background); --transcript-border: var(--primary-color); } /* ===== OPTIMIZED THEME VARIATIONS ===== */ [data-theme="pink"] { /* Core Theme Colors - Pink Passion */ --primary-color: #ff6b9d; --primary-rgb: 255, 107, 157; --secondary-color: #ffeaa7; --accent-color: #fd79a8; --background-overlay: rgba(255, 107, 157, 0.15); --gradient-start: #ff6b9d; --gradient-end: #fd79a8; --text-glow: 0 0 10px rgba(255, 107, 157, 0.5); --button-hover: rgba(255, 107, 157, 0.3); --switch-color: var(--primary-color); /* Contrast and Accessibility */ --text-on-primary: #ffffff; --text-on-secondary: #222222; --text-on-accent: #ffffff; --text-on-background: #ffffff; /* UI Component Colors - Chat Interface */ --chat-bg: rgba(255, 107, 157, 0.9); --chat-text: var(--text-on-primary); --chat-header-bg: rgba(255, 255, 255, 0.05); --chat-border: var(--primary-color); --chat-input-bg: rgba(255, 255, 255, 0.1); --chat-input-text: var(--text-on-background); --chat-input-placeholder: rgba(255, 255, 255, 0.6); --chat-message-user-bg: var(--primary-color); --chat-message-user-text: var(--text-on-primary); --chat-message-kimi-bg: rgba(255, 255, 255, 0.15); --chat-message-kimi-text: var(--text-on-background); /* Modal & Overlay Colors */ --modal-bg: rgba(255, 107, 157, 0.95); --modal-border: var(--primary-color); --modal-header-bg: linear-gradient(135deg, var(--primary-color), var(--secondary-color)); --modal-text: var(--text-on-primary); --modal-title-color: var(--text-on-secondary); --modal-overlay-bg: rgba(0, 0, 0, 0.8); --modal-close-hover-bg: rgba(255, 255, 255, 0.2); /* Settings Panel & Tabs */ --settings-bg: #181018; --settings-text: var(--text-on-background); --settings-tab-bg: #1a1a1a; --settings-tab-color: #bfa6b6; --settings-tab-hover-bg: rgba(255, 255, 255, var(--hover-opacity)); --settings-tab-hover-color: rgba(255, 255, 255, 0.9); --settings-tab-active-bg: var(--primary-color); --settings-tab-active-color: var(--text-on-primary); --settings-tab-border: var(--primary-color); --settings-section-bg: #22121a; --settings-section-border: rgba(255, 107, 157, var(--border-opacity)); --settings-section-header-color: var(--text-on-background); /* Form Element Colors */ --input-bg: rgba(255, 255, 255, 0.1); --input-text: var(--text-on-background); --input-border: var(--primary-color); --input-focus-bg: rgba(255, 255, 255, var(--hover-opacity)); --input-focus-border: var(--accent-color); --input-placeholder: rgba(255, 255, 255, 0.6); /* Button Colors */ --button-primary-bg: var(--primary-color); --button-primary-text: var(--text-on-primary); --button-primary-hover-bg: var(--accent-color); --button-secondary-bg: rgba(255, 255, 255, 0.1); --button-secondary-text: var(--text-on-background); --button-secondary-hover-bg: rgba(255, 255, 255, var(--hover-opacity)); /* All other pink theme variables... */ --slider-track-bg: rgba(255, 255, 255, 0.1); --slider-track-active-bg: var(--primary-color); --slider-thumb-bg: var(--primary-color); --slider-thumb-hover-bg: var(--accent-color); --slider-value-bg: #181018; --slider-value-border: var(--primary-color); --slider-value-color: var(--text-on-background); /* Toggle Switch */ --switch-bg-inactive: rgba(255, 255, 255, 0.15); --switch-bg-active: linear-gradient(90deg, var(--primary-color), var(--accent-color)); /* Mic Button & Pulse Effect */ --mic-button-bg: var(--button-hover); --mic-button-border: var(--primary-color); --mic-button-shadow: 0 0 15px var(--primary-color); --mic-button-hover-bg: var(--primary-color); --mic-button-hover-shadow: var(--text-glow); --mic-button-icon-color: var(--text-on-primary); /* Cards & Stats */ --card-bg: rgba(255, 255, 255, 0.05); --card-border: rgba(255, 255, 255, 0.1); --card-hover-bg: rgba(255, 255, 255, 0.08); --stat-value-color: var(--primary-color); --stat-label-color: rgba(255, 255, 255, 0.7); /* Character Selection Colors */ --character-card-bg: var(--card-bg); --character-card-border: var(--card-border); --character-card-hover-bg: var(--card-hover-bg); --character-selected-border: var(--primary-color); --character-selected-bg: rgba(255, 107, 157, 0.13); --character-name-color: var(--text-on-background); } [data-theme="blue"] { --primary-color: #74b9ff; --primary-rgb: 116, 185, 255; --secondary-color: #81ecec; --accent-color: #0984e3; --background-overlay: rgba(116, 185, 255, 0.15); --gradient-start: #74b9ff; --gradient-end: #0984e3; --text-glow: 0 0 10px rgba(116, 185, 255, 0.5); --button-hover: rgba(116, 185, 255, 0.3); --modal-title-color: #0a2340; --switch-color: #3498db; /* UI Component Colors */ --chat-bg: rgba(116, 185, 255, 0.9); --chat-border: #74b9ff; --chat-message-user-bg: #74b9ff; --chat-message-kimi-bg: rgba(255, 255, 255, 0.15); --input-border: #74b9ff; --input-focus-border: #0984e3; /* Modal & Overlay Colors */ --modal-bg: rgba(116, 185, 255, 0.95); --modal-border: #74b9ff; --modal-header-bg: linear-gradient(135deg, #74b9ff, #81ecec); /* Settings Panel & Tabs */ --settings-tab-active-bg: #74b9ff; --settings-section-border: #3a4a7a; --settings-tab-border: #74b9ff; /* Slider Components */ --slider-value-border: #0984e3; /* Toggle Switch */ --switch-bg-active: linear-gradient(90deg, #74b9ff, #0984e3); /* Mic Button & Pulse Effect */ --mic-button-border: #74b9ff; --mic-button-shadow: 0 0 15px #74b9ff; --mic-button-hover-bg: #74b9ff; --mic-button-hover-shadow: 0 0 10px rgba(116, 185, 255, 0.5); --mic-listening-border: #0984e3; --mic-listening-shadow: 0 0 15px #0984e3; --mic-pulse-color: rgba(9, 132, 227, 0.5); /* Cards & Stats */ --stat-value-color: #0984e3; /* Plugin Cards */ --plugin-card-border: #74b9ff; --plugin-type-badge-bg: #0984e3; --plugin-active-badge-bg: linear-gradient(90deg, #74b9ff, #0984e3); /* Help Modal */ --creator-name-color: #0984e3; --creator-avatar-bg: linear-gradient(135deg, #74b9ff, #81ecec); --creator-role-bg: linear-gradient(135deg, #74b9ff, #81ecec); --creator-role-color: #0a2340; --philosophy-bg: rgba(116, 185, 255, 0.1); --philosophy-border: rgba(116, 185, 255, 0.3); --philosophy-border-left: #74b9ff; --feature-icon-color: #0984e3; --feature-title-color: #0984e3; /* Select Options */ --select-option-hover-bg: #74b9ff; --select-option-checked-bg: #0984e3; /* Model Colors */ --model-strength-color: #0984e3; --model-strength-text: #fff; --model-provider-color: #00b894; --model-provider-text: #fff; /* Text Colors */ --text-primary: #222; --text-secondary: #555; /* Character Selection Colors */ --character-selected-border: #0984e3; --character-selected-bg: rgba(116, 185, 255, 0.13); } [data-theme="purple"] { --primary-color: #a29bfe; --primary-rgb: 162, 155, 254; --secondary-color: #fd79a8; --accent-color: #6c5ce7; --background-overlay: rgba(162, 155, 254, 0.15); --gradient-start: #a29bfe; --gradient-end: #6c5ce7; --text-glow: 0 0 10px rgba(162, 155, 254, 0.5); --button-hover: rgba(162, 155, 254, 0.3); --modal-title-color: #2d2250; --switch-color: #a259ff; /* UI Component Colors */ --chat-bg: rgba(162, 155, 254, 0.9); --chat-border: #a29bfe; --chat-message-user-bg: #a29bfe; --chat-message-kimi-bg: rgba(255, 255, 255, 0.15); --input-border: #a29bfe; --input-focus-border: #6c5ce7; /* Modal & Overlay Colors */ --modal-bg: rgba(162, 155, 254, 0.95); --modal-border: #a29bfe; --modal-header-bg: linear-gradient(135deg, #a29bfe, #fd79a8); /* Settings Panel & Tabs */ --settings-tab-active-bg: #a29bfe; --settings-section-border: #4a3a7a; --settings-tab-border: #a29bfe; --settings-bg: #2d2250; /* Slider Components */ --slider-value-border: #6c5ce7; /* Toggle Switch */ --switch-bg-active: linear-gradient(90deg, #a29bfe, #6c5ce7); /* Mic Button & Pulse Effect */ --mic-button-border: #a29bfe; --mic-button-shadow: 0 0 15px #a29bfe; --mic-button-hover-bg: #a29bfe; --mic-button-hover-shadow: 0 0 10px rgba(162, 155, 254, 0.5); --mic-listening-border: #6c5ce7; --mic-listening-shadow: 0 0 15px #6c5ce7; --mic-pulse-color: rgba(108, 92, 231, 0.5); /* Cards & Stats */ --stat-value-color: #6c5ce7; /* Plugin Cards */ --plugin-card-border: #a29bfe; --plugin-type-badge-bg: #6c5ce7; --plugin-active-badge-bg: linear-gradient(90deg, #a29bfe, #6c5ce7); /* Help Modal */ --creator-name-color: #6c5ce7; --creator-avatar-bg: linear-gradient(135deg, #a29bfe, #fd79a8); --creator-role-bg: linear-gradient(135deg, #a29bfe, #fd79a8); --creator-role-color: #2d2250; --philosophy-bg: rgba(162, 155, 254, 0.1); --philosophy-border: rgba(162, 155, 254, 0.3); --philosophy-border-left: #a29bfe; --feature-icon-color: #6c5ce7; --feature-title-color: #6c5ce7; /* Select Options */ --select-option-hover-bg: #a29bfe; --select-option-checked-bg: #6c5ce7; /* Model Colors */ --model-strength-color: #6c5ce7; --model-strength-text: #fff; --model-provider-color: #fd79a8; --model-provider-text: #fff; /* Text Colors */ --text-primary: #2d2250; --text-secondary: #555; /* Character Selection Colors */ --character-selected-border: #6c5ce7; --character-selected-bg: rgba(162, 155, 254, 0.13); /* Additional Purple Theme Variables */ --button-primary-bg: var(--primary-color); --button-primary-text: var(--text-on-primary); --button-primary-hover-bg: var(--accent-color); --button-secondary-bg: rgba(255, 255, 255, 0.1); --button-secondary-text: var(--text-on-background); --guide-step-number-color: var(--primary-color); --guide-step-number-bg: rgba(162, 155, 254, var(--hover-opacity)); --waiting-indicator-color: var(--primary-color); --progress-fill-bg: linear-gradient(90deg, var(--primary-color), var(--accent-color)); } [data-theme="green"] { --primary-color: #27ae60; --primary-rgb: 39, 174, 96; --secondary-color: #2ecc71; --accent-color: #16a085; --background-overlay: rgba(39, 174, 96, 0.15); --gradient-start: #27ae60; --gradient-end: #16a085; --text-glow: 0 0 10px rgba(39, 174, 96, 0.5); --button-hover: rgba(39, 174, 96, 0.3); --modal-title-color: #1a3d2e; --switch-color: #27ae60; /* Contrast and Accessibility for Green Theme */ --text-on-primary: #ffffff; --text-on-secondary: #1a3d2e; --text-on-accent: #ffffff; --text-on-background: #ffffff; /* UI Component Colors */ --chat-bg: rgba(39, 174, 96, 0.9); --chat-border: #27ae60; --chat-text: var(--text-on-primary); --chat-message-user-bg: #27ae60; --chat-message-user-text: var(--text-on-primary); --chat-message-kimi-bg: rgba(255, 255, 255, 0.15); --chat-message-kimi-text: var(--text-on-background); --input-border: #27ae60; --input-focus-border: #16a085; --input-text: var(--text-on-background); /* Modal & Overlay Colors */ --modal-bg: rgba(39, 174, 96, 0.95); --modal-border: #27ae60; --modal-header-bg: linear-gradient(135deg, #27ae60, #2ecc71); --modal-text: var(--text-on-primary); /* Settings Panel & Tabs */ --settings-text: var(--text-on-background); --settings-tab-active-bg: #27ae60; --settings-tab-active-color: var(--text-on-primary); --settings-section-border: #27ae60; --settings-tab-border: #27ae60; --settings-section-header-color: var(--text-on-background); /* Button Colors */ --button-primary-bg: var(--primary-color); --button-primary-text: var(--text-on-primary); --button-primary-hover-bg: var(--accent-color); --button-secondary-bg: rgba(255, 255, 255, 0.1); --button-secondary-text: var(--text-on-background); /* Slider Components */ --slider-value-border: #16a085; --slider-thumb-bg: var(--primary-color); --slider-thumb-hover-bg: var(--accent-color); /* Toggle Switch */ --switch-bg-active: linear-gradient(90deg, #27ae60, #16a085); /* Mic Button & Pulse Effect */ --mic-button-border: #27ae60; --mic-button-shadow: 0 0 15px #27ae60; --mic-button-hover-bg: #27ae60; --mic-button-hover-shadow: 0 0 10px rgba(39, 174, 96, 0.5); --mic-button-icon-color: var(--text-on-primary); --mic-listening-border: #16a085; --mic-listening-shadow: 0 0 15px #16a085; --mic-pulse-color: rgba(22, 160, 133, 0.5); --mic-pulse-listening-color: rgba(22, 160, 133, 0.4); /* Cards & Stats */ --card-text: var(--text-on-background); --stat-value-color: #16a085; /* Plugin Cards */ --plugin-card-border: #27ae60; --plugin-card-title-color: var(--text-on-background); --plugin-card-desc-color: #e0cfe6; --plugin-card-author-color: #bfa6b6; --plugin-type-badge-bg: #16a085; --plugin-type-badge-text: var(--text-on-accent); --plugin-active-badge-bg: linear-gradient(90deg, #27ae60, #16a085); --plugin-active-badge-text: var(--text-on-primary); /* Help Modal */ --creator-name-color: #16a085; --creator-avatar-bg: linear-gradient(135deg, #27ae60, #2ecc71); --creator-role-bg: linear-gradient(135deg, #27ae60, #2ecc71); --creator-role-color: var(--text-on-secondary); --philosophy-bg: rgba(39, 174, 96, 0.1); --philosophy-border: rgba(39, 174, 96, var(--border-opacity)); --philosophy-border-left: #27ae60; --feature-icon-color: #147190; --feature-title-color: #147190; --guide-step-number-color: var(--primary-color); --guide-step-number-bg: rgba(39, 174, 96, var(--hover-opacity)); /* Select Options */ --select-option-hover-bg: #27ae60; --select-option-checked-bg: #16a085; /* Model Colors */ --model-strength-color: #27ae60; --model-strength-text: var(--text-on-primary); --model-provider-color: #2ecc71; --model-provider-text: var(--text-on-primary); /* Text Colors */ --text-primary: var(--text-on-background); --text-secondary: #4e6151; --text-muted: rgba(255, 255, 255, 0.6); /* Character Selection Colors */ --character-selected-border: #16a085; --character-selected-bg: rgba(39, 174, 96, 0.13); --character-name-color: var(--text-on-background); /* Additional Green Theme Variables */ --waiting-indicator-color: var(--primary-color); --loading-spinner-color: var(--primary-color); --progress-fill-bg: linear-gradient(90deg, var(--primary-color), var(--accent-color)); } [data-theme="dark"] { --primary-color: #5e60ce; --primary-rgb: 94, 96, 206; --secondary-color: #23262f; --accent-color: #8b5cf6; --background-overlay: rgba(24, 26, 32, 0.85); --gradient-start: #5e60ce; --gradient-end: #8b5cf6; --text-glow: 0 0 10px rgba(94, 96, 206, 0.3); --button-hover: rgba(94, 96, 206, 0.15); --modal-title-color: #e0e0e0; --switch-color: #5e60ce; /* Contrast and Accessibility for Dark Theme */ --text-on-primary: #ffffff; --text-on-secondary: #e0e0e0; --text-on-accent: #ffffff; --text-on-background: #e0e0e0; /* UI Component Colors */ --chat-bg: rgba(24, 26, 32, 0.95); --chat-border: #5e60ce; --chat-text: var(--text-on-background); --chat-message-user-bg: #1e253c; --chat-message-user-text: var(--text-on-background); --chat-message-kimi-bg: #23262f; --chat-message-kimi-text: var(--text-on-background); --input-border: #5e60ce; --input-focus-border: #8b5cf6; --input-text: var(--text-on-background); /* Modal & Overlay Colors */ --modal-bg: rgba(24, 26, 32, 0.98); --modal-border: #5e60ce; --modal-header-bg: linear-gradient(135deg, #5e60ce, #8b5cf6); --modal-text: var(--text-on-background); /* Settings Panel & Tabs */ --settings-bg: #0f1114; --settings-text: var(--text-on-background); --settings-tab-bg: #181a20; --settings-tab-active-bg: #5e60ce; --settings-tab-active-color: var(--text-on-primary); --settings-section-bg: #1a1d23; --settings-section-border: rgba(94, 96, 206, var(--border-opacity)); --settings-tab-border: #5e60ce; --settings-section-header-color: var(--text-on-background); /* Button Colors */ --button-primary-bg: var(--primary-color); --button-primary-text: var(--text-on-primary); --button-primary-hover-bg: var(--accent-color); --button-secondary-bg: rgba(255, 255, 255, 0.05); --button-secondary-text: var(--text-on-background); /* Slider Components */ --slider-value-bg: #0f1114; --slider-value-border: #5e60ce; --slider-value-color: var(--text-on-background); --slider-thumb-bg: var(--primary-color); --slider-thumb-hover-bg: var(--accent-color); /* Toggle Switch */ --switch-bg-inactive: rgba(255, 255, 255, 0.05); --switch-bg-active: linear-gradient(90deg, #5e60ce, #8b5cf6); /* Mic Button & Pulse Effect */ --mic-button-border: #5e60ce; --mic-button-shadow: 0 0 15px #5e60ce; --mic-button-hover-bg: #5e60ce; --mic-button-hover-shadow: 0 0 10px rgba(94, 96, 206, 0.5); --mic-button-icon-color: var(--text-on-primary); --mic-listening-border: #8b5cf6; --mic-listening-shadow: 0 0 15px #8b5cf6; --mic-pulse-color: rgba(139, 92, 246, 0.5); --mic-pulse-listening-color: rgba(139, 92, 246, 0.4); /* Cards & Stats */ --card-bg: rgba(255, 255, 255, 0.02); --card-border: rgba(255, 255, 255, 0.05); --card-hover-bg: rgba(255, 255, 255, 0.05); --card-text: var(--text-on-background); --stat-value-color: #8b5cf6; /* Plugin Cards */ --plugin-card-bg: linear-gradient(135deg, #1a1d23 80%, rgba(24, 26, 32, 0.98) 100%); --plugin-card-border: #5e60ce; --plugin-card-title-color: var(--text-on-background); --plugin-card-desc-color: rgba(224, 224, 224, 0.7); --plugin-card-author-color: rgba(224, 224, 224, 0.5); --plugin-type-badge-bg: #8b5cf6; --plugin-type-badge-text: var(--text-on-accent); --plugin-active-badge-bg: linear-gradient(90deg, #5e60ce, #8b5cf6); --plugin-active-badge-text: var(--text-on-primary); /* Help Modal */ --help-modal-bg: rgba(24, 26, 32, 0.98); --help-modal-border: #5e60ce; --creator-card-bg: rgba(255, 255, 255, 0.02); --creator-card-border: rgba(255, 255, 255, 0.05); --creator-name-color: #8b5cf6; --creator-avatar-bg: linear-gradient(135deg, #5e60ce, #8b5cf6); --creator-role-bg: linear-gradient(135deg, #5e60ce, #8b5cf6); --creator-role-color: var(--text-on-primary); --philosophy-bg: rgba(94, 96, 206, 0.05); --philosophy-border: rgba(94, 96, 206, var(--border-opacity)); --philosophy-border-left: #5e60ce; --feature-item-bg: rgba(255, 255, 255, 0.02); --feature-item-border: rgba(94, 96, 206, var(--border-opacity)); --feature-icon-color: #8b5cf6; --feature-title-color: #8b5cf6; --feature-text-color: rgba(224, 224, 224, 0.7); --guide-step-bg: rgba(255, 255, 255, 0.02); --guide-step-number-color: var(--primary-color); --guide-step-number-bg: rgba(94, 96, 206, var(--hover-opacity)); --tip-item-bg: rgba(255, 255, 255, 0.02); /* Select Options */ --select-option-bg: rgba(24, 26, 32, 0.95); --select-option-text: var(--text-on-background); --select-option-hover-bg: #5e60ce; --select-option-checked-bg: #8b5cf6; /* Model Colors */ --model-card-bg: rgba(255, 255, 255, 0.02); --model-card-border: rgba(255, 255, 255, 0.05); --model-card-hover-bg: rgba(255, 255, 255, 0.05); --model-card-selected-border: var(--primary-color); --model-name-color: var(--text-on-background); --model-description-color: rgba(224, 224, 224, 0.7); --model-strength-color: #5e60ce; --model-strength-text: var(--text-on-primary); --model-provider-color: #8b5cf6; --model-provider-text: var(--text-on-accent); /* Text Colors */ --text-primary: var(--text-on-background); --text-secondary: #9ca3af; --text-muted: rgba(224, 224, 224, 0.6); /* Character Selection Colors */ --character-card: rgba(255, 255, 255, 0.02); --character-card-border: rgba(255, 255, 255, 0.05); --character-card-hover-bg: rgba(255, 255, 255, 0.05); --character-selected-border: #8b5cf6; --character-selected-bg: rgba(94, 96, 206, 0.1); --character-name-color: var(--text-on-background); /* Additional Dark Theme Variables */ --waiting-indicator-color: var(--primary-color); --loading-spinner-color: var(--primary-color); --progress-bg: rgba(255, 255, 255, 0.05); --progress-fill-bg: linear-gradient(90deg, var(--primary-color), var(--accent-color)); --progress-text-color: var(--text-on-background); --transcript-bg: rgba(0, 0, 0, 0.9); --transcript-text: var(--text-on-background); --transcript-border: var(--primary-color); } /* ===== ANIMATION MANAGEMENT ===== */ /* Respect user's reduced motion preference. When user requests reduced motion, disable animations and transitions globally while preserving critical animations (mic button, loading screen). This preserves accessibility without relying on a UI toggle. */ @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation: none !important; transition: none !important; } /* Keep mic button animations even when reduced-motion is requested */ .mic-button, .mic-button *, .mic-button::after { animation: revert !important; transition: revert !important; } /* Keep loading screen animations */ #loading-screen, #loading-screen * { animation: revert !important; transition: revert !important; } } /* Ensure critical hover effects remain functional */ body.animations-enabled .kimi-button:hover, body.animations-enabled .control-button-unified:hover { transform: translateY(-2px); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } body.animations-enabled .mic-button:hover { transform: scale(1.1); transition: all 0.2s ease; } /* ===== LOADING SCREEN ===== */ #loading-screen { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: var(--background-primary, #1a1a1a); z-index: 10000; display: flex; justify-content: center; align-items: center; opacity: 1; transition: opacity 0.5s ease-out; } #loading-screen img { max-width: 200px; max-height: 200px; animation: loadingPulse 2s infinite ease-in-out; } @keyframes loadingPulse { 0%, 100% { opacity: 0.7; transform: scale(1); } 50% { opacity: 1; transform: scale(1.05); } } /* ===== GLOBAL STYLES ===== */ * { margin: 0; padding: 0; box-sizing: border-box; } html, body { height: 100%; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; color: white; overflow: hidden; } .video-container { position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: -1; background-color: #1a1a1a; } .bg-video.active { opacity: 1; } .bg-video { position: absolute; top: 0; left: 0; width: 100%; height: 100%; object-fit: contain; opacity: 0; transition: opacity var(--video-fade-duration) cubic-bezier(0.4, 0, 0.2, 1); background-color: #1a1a1a; will-change: opacity; backface-visibility: hidden; } .bg-video.transitioning { opacity: 0; transition: opacity var(--video-fade-duration) cubic-bezier(0.4, 0, 0.2, 1); pointer-events: none; } .content-overlay { position: relative; height: 100vh; width: 100%; display: flex; flex-direction: column; justify-content: flex-end; align-items: center; padding: 20px; background-color: var(--background-overlay); opacity: var(--interface-opacity); z-index: 1; } .top-bar { width: 100%; max-width: 500px; text-align: center; margin-top: 10px; } .top-bar label { font-size: 1rem; font-weight: 600; text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.5); margin-bottom: 8px; display: block; } .progress-container { width: 100%; height: 12px; background-color: var(--progress-bg); border-radius: 10px; overflow: hidden; } .progress-fill { height: 100%; width: 50%; /* Changed from 65% to match new default favorability level */ background: var(--progress-fill-bg); border-radius: 10px; transition: width 0.5s ease-in-out; box-shadow: var(--text-glow); } /* Center content styles can be added here if needed */ .transcript-container { position: absolute; bottom: 180px; left: 50%; transform: translateX(-50%); width: 80%; max-width: 600px; max-height: 400px; padding: 15px; background: var(--transcript-bg); backdrop-filter: blur(10px); border-radius: 10px; border: 1px solid var(--transcript-border); text-align: center; opacity: 0; transition: opacity 0.3s ease-in-out; pointer-events: none; box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3); overflow-y: auto; overflow-x: hidden; } .transcript-container.visible { opacity: 1; pointer-events: auto; } /* Custom scrollbar for transcript container */ .transcript-container::-webkit-scrollbar { width: var(--scrollbar-width); } .transcript-container::-webkit-scrollbar-track { background: var(--scrollbar-track-bg); border-radius: 4px; } .transcript-container::-webkit-scrollbar-thumb { background: var(--scrollbar-thumb-bg); border-radius: 4px; transition: background 0.3s ease; } .transcript-container::-webkit-scrollbar-thumb:hover { background: var(--scrollbar-thumb-hover-bg); } #transcript { font-size: 1.2rem; color: var(--transcript-text); text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.7); margin: 0; line-height: 1.3; text-align: left; } /* ===== ACCESSIBILITY - FOCUS STYLES ===== */ select:focus, input:focus, button:focus, .kimi-slider:focus, .kimi-slider-unified:focus { box-shadow: 0 0 0 2px var(--primary-pink); border-color: var(--primary-pink); } .control-button-unified:focus { outline: 2px solid var(--primary-pink); outline-offset: 2px; } /* ===== CHAT INTERFACE ===== */ .chat-container { position: fixed; top: 20px; right: 20px; z-index: 1000; width: 400px; max-width: calc(100vw - 40px); height: 600px; max-height: 80vh; background: var(--chat-bg); backdrop-filter: blur(20px); border-radius: 15px; border: 1px solid var(--chat-border); box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3); display: none; flex-direction: column; overflow: hidden; transform: translateX(400px); opacity: 0; transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); } .chat-container.visible { display: flex; transform: translateX(0); opacity: 1; } .chat-header { background: var(--chat-header-bg); padding: 15px 20px; display: flex; justify-content: space-between; align-items: center; border-bottom: 1px solid rgba(255, 255, 255, 0.1); } .chat-header h3 { margin: 0; color: var(--chat-text); font-size: 1.1rem; display: flex; align-items: center; gap: 8px; } .chat-messages { flex: 1; padding: 15px; overflow-y: auto; display: flex; flex-direction: column; gap: 10px; } .message { max-width: 95%; padding: 12px 16px; border-radius: 18px; font-size: 0.95rem; line-height: 1.3; white-space: pre-line; animation: messageSlideIn 0.3s ease-out; } .message.user { align-self: flex-end; background: var(--chat-message-user-bg); color: var(--chat-message-user-text); } .message.kimi { align-self: flex-start; background: var(--chat-message-kimi-bg); color: var(--chat-message-kimi-text); } .message-time { font-size: 0.75rem; color: rgba(255, 255, 255, 0.6); margin-top: 4px; text-align: right; } .delete-message-btn { background: none; border: none; color: rgba(255, 255, 255, 0.4); cursor: pointer; padding: 2px 4px; border-radius: 3px; font-size: 0.7rem; margin-left: 8px; transition: all 0.2s ease; } .delete-message-btn:hover { color: #ff4757 !important; background: rgba(255, 71, 87, 0.1) !important; } .chat-input-container { padding: 15px 20px; display: flex; gap: 10px; background: rgba(255, 255, 255, 0.05); border-top: 1px solid rgba(255, 255, 255, 0.1); } #chat-input { flex: 1; background: var(--chat-input-bg); border: 1px solid rgba(255, 255, 255, 0.2); border-radius: 20px; padding: 10px 15px; color: var(--chat-input-text); font-size: 0.9rem; outline: none; transition: all 0.3s ease; /* Make textarea behave like the previous single-line input */ box-sizing: border-box; resize: none; /* prevent manual resizing */ /* show approximately 2 lines by default, allow up to ~4 lines */ min-height: 58px; max-height: 160px; /* allow multi-line but limit growth */ line-height: 1.2; overflow: auto; } #chat-input::placeholder { color: var(--chat-input-placeholder); } #chat-input:focus { border-color: var(--primary-color); box-shadow: 0 0 0 2px rgba(255, 107, 157, 0.2); } #send-button { background: var(--primary-color); border: none; border-radius: 20px; width: 40px; height: 40px; display: flex; align-items: center; justify-content: center; color: white; cursor: pointer; transition: all 0.3s ease; } #send-button:hover { background: var(--accent-color); transform: scale(1.05); } .chat-toggle, .chat-delete { background: none; border: none; color: var(--chat-text); cursor: pointer; padding: 5px; border-radius: 5px; transition: all 0.3s ease; } .chat-delete { color: rgba(255, 255, 255, 0.7); } .chat-delete:hover { color: #ff4757; background: rgba(255, 71, 87, 0.1); } .chat-toggle:hover { background: rgba(255, 255, 255, 0.1); } /* ===== UNIFIED BUTTON COMPONENTS ===== */ .kimi-button, .control-button-unified { background: var(--button-primary-bg); border: none; border-radius: 8px; color: var(--button-primary-text); padding: 10px 20px; font-size: 0.9rem; font-weight: 500; cursor: pointer; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2); position: relative; overflow: hidden; backdrop-filter: blur(10px); border: 1px solid rgba(255, 255, 255, 0.1); } .kimi-button::before, .control-button-unified::before { content: ""; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent); transition: left 0.5s ease; } .kimi-button:hover, .control-button-unified:hover { transform: translateY(-2px); box-shadow: 0 8px 25px rgba(0, 0, 0, 0.3); background: var(--button-primary-hover-bg); } .kimi-button:hover::before, .control-button-unified:hover::before { left: 100%; } .kimi-button:active, .control-button-unified:active { transform: translateY(0); transition: all 0.1s ease; } .kimi-button:disabled, .control-button-unified:disabled { opacity: 0.5; cursor: not-allowed; transform: none; } /* Button Variants */ .kimi-button.danger { background: var(--button-danger-bg); color: var(--button-danger-text); } .kimi-button.danger:hover { background: var(--button-danger-hover-bg); } .kimi-button.success { background: linear-gradient(135deg, #26de81, #20bf6b); } .kimi-button.success:hover { background: linear-gradient(135deg, #20bf6b, #26de81); } .kimi-button.secondary { background: var(--button-secondary-bg); color: var(--button-secondary-text); } .kimi-button.secondary:hover { background: var(--button-secondary-hover-bg); } /* Circular Control Buttons */ .control-button-unified { width: 50px; height: 50px; border-radius: 50%; padding: 0; display: flex; align-items: center; justify-content: center; background: var(--button-hover); box-shadow: var(--mic-button-shadow); border: 1px solid var(--primary-color); } .control-button-unified:hover { transform: translateY(-2px) scale(1.05); background: var(--primary-color); box-shadow: var(--text-glow); } .control-button-unified i { font-size: 1.2rem; transition: transform 0.3s ease; } .control-button-unified:hover i { transform: scale(1.1); } /* ===== UNIFIED FORM COMPONENTS ===== */ /* Select Elements */ .kimi-select, .kimi-select-unified { background: var(--select-bg); border: 1px solid var(--select-border); border-radius: 8px; color: var(--select-text); padding: 8px 12px; font-size: 0.9rem; outline: none; transition: all 0.3s ease; backdrop-filter: blur(10px); cursor: pointer; width: 100%; box-sizing: border-box; } .kimi-select:hover, .kimi-select-unified:hover { background: var(--input-focus-bg); border-color: var(--accent-color); box-shadow: 0 0 10px var(--primary-color); } .kimi-select:focus, .kimi-select-unified:focus { background: var(--input-focus-bg); border-color: var(--input-focus-border); box-shadow: 0 0 15px var(--primary-color); } .kimi-select option, .kimi-select-unified option { background: var(--select-option-bg); color: var(--select-option-text); padding: 12px 15px; border: none; font-size: 0.9rem; transition: all 0.3s ease; } .kimi-select option:hover, .kimi-select-unified option:hover, .kimi-select option:focus, .kimi-select-unified option:focus { background: var(--select-option-hover-bg); color: var(--select-option-hover-text); } .kimi-select option:checked, .kimi-select-unified option:checked, .kimi-select option:selected, .kimi-select-unified option:selected { background: var(--select-option-checked-bg); color: var(--select-option-checked-text); font-weight: 600; box-shadow: 0 0 10px var(--primary-color); } /* Input Elements */ .kimi-input, .kimi-input-unified { background: var(--input-bg); border: 1px solid var(--input-border); border-radius: 8px; color: var(--input-text); padding: 8px 12px; font-size: 0.9rem; outline: none; transition: all 0.3s ease; backdrop-filter: blur(10px); width: 100%; box-sizing: border-box; } .kimi-input:focus, .kimi-input-unified:focus { background: var(--input-focus-bg); border-color: var(--input-focus-border); box-shadow: 0 0 15px var(--primary-color); } .kimi-input::placeholder, .kimi-input-unified::placeholder { color: var(--input-placeholder); } /* Slider Elements */ .kimi-slider, .kimi-slider-unified { -webkit-appearance: none; appearance: none; height: 6px; border-radius: 3px; background: var(--slider-track-bg); outline: none; transition: all 0.3s ease; cursor: pointer; } .kimi-slider::-webkit-slider-thumb, .kimi-slider-unified::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; width: 18px; height: 18px; border-radius: 50%; background: var(--slider-thumb-bg); cursor: pointer; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.3); transition: all 0.3s ease; } .kimi-slider::-webkit-slider-thumb:hover, .kimi-slider-unified::-webkit-slider-thumb:hover { transform: scale(1.2); background: var(--slider-thumb-hover-bg); box-shadow: 0 4px 15px rgba(0, 0, 0, 0.4), var(--text-glow); } .kimi-slider::-moz-range-thumb, .kimi-slider-unified::-moz-range-thumb { width: 18px; height: 18px; border-radius: 50%; background: var(--slider-thumb-bg); cursor: pointer; border: none; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.3); transition: all 0.3s ease; } .kimi-slider::-moz-range-thumb:hover, .kimi-slider-unified::-moz-range-thumb:hover { transform: scale(1.2); background: var(--slider-thumb-hover-bg); box-shadow: 0 4px 15px rgba(0, 0, 0, 0.4); } /* ===== CONSOLIDATED SCROLLBAR SYSTEM ===== */ * { scrollbar-width: thin; scrollbar-color: var(--scrollbar-thumb-bg) var(--scrollbar-track-bg); } *::-webkit-scrollbar { width: var(--scrollbar-width); height: var(--scrollbar-width); } *::-webkit-scrollbar-track { background: var(--scrollbar-track-bg); border-radius: 4px; } *::-webkit-scrollbar-thumb { background: var(--scrollbar-thumb-bg); border-radius: 4px; transition: all 0.3s ease; border: 1px solid rgba(255, 255, 255, 0.1); } *::-webkit-scrollbar-thumb:hover { background: var(--scrollbar-thumb-hover-bg); transform: scale(1.1); } *::-webkit-scrollbar-thumb:active { background: var(--scrollbar-thumb-active-bg); } *::-webkit-scrollbar-corner { background: var(--scrollbar-corner-bg); } /* ===== MAIN LAYOUT AND CONTROLS ===== */ .control-buttons { display: flex; justify-content: center; align-items: center; gap: 20px; margin-bottom: 10px; } .bottom-bar { width: 100%; display: flex; flex-direction: column; justify-content: center; align-items: center; position: relative; } .favorability-text { position: absolute; right: 10px; top: 50%; transform: translateY(-50%); font-size: 0.85rem; font-weight: 600; color: var(--progress-text-color); text-shadow: 0 1px 3px rgba(0, 0, 0, 0.5); } .progress-container { position: relative; } .mic-button { position: relative; width: 90px; height: 90px; background: var(--mic-button-bg); backdrop-filter: blur(10px); border: 1px solid var(--mic-button-border); border-radius: 50%; display: flex; justify-content: center; align-items: center; cursor: pointer; transition: all 0.2s ease; box-shadow: var(--mic-button-shadow); } .mic-button:not(.is-listening)::after { display: none; } .mic-button.is-listening.mic-pulse-active::after { content: ""; position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); width: 120px; height: 120px; border-radius: 50%; background: var(--mic-pulse-color); opacity: 0.6; z-index: -1; animation: micPulseRed 1.2s infinite cubic-bezier(0.66, 0, 0, 1); pointer-events: none; } .mic-button:hover { transform: scale(1.1); background: var(--mic-button-hover-bg); box-shadow: var(--mic-button-hover-shadow); } .mic-button:active { transform: scale(0.95); } .mic-button i { font-size: 28px; color: var(--mic-button-icon-color); transition: all 0.3s ease; } .mic-button.is-listening { animation: pulse 1.5s infinite; border: 1px solid #27ae60; box-shadow: 0 0 15px #27ae60; } .mic-button.is-listening i { animation: micPulse 0.8s infinite alternate; } .mic-pulse-active { position: relative; box-shadow: 0 0 0 0 var(--primary-color); animation: micPulse 1.2s infinite cubic-bezier(0.66, 0, 0, 1); } .mic-button.mic-pulse-active { position: relative; z-index: 1; } .mic-button.mic-pulse-active::after { content: ""; position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); width: 120px; height: 120px; border-radius: 50%; background: var(--mic-pulse-color); opacity: 0.6; z-index: -1; animation: micPulseRed 1.2s infinite cubic-bezier(0.66, 0, 0, 1); pointer-events: none; } @keyframes micPulseRed { 0% { transform: translate(-50%, -50%) scale(0.8); opacity: 0.6; } 70% { transform: translate(-50%, -50%) scale(1.2); opacity: 0; } 100% { transform: translate(-50%, -50%) scale(0.8); opacity: 0; } } /* ===== LARGE SCREENS OPTIMIZATION ===== */ @media (min-width: 1200px) { .chat-container { width: 400px; height: 600px; right: 30px; top: 30px; } } /* ===== CONSOLIDATED RESPONSIVE DESIGN ===== */ @media (max-width: 768px) { .content-overlay { padding: 20px; } .chat-container { width: 400px; max-width: calc(100vw - 30px); top: 15px; right: 15px; } .control-buttons { gap: 15px; } .control-button-unified { width: 45px; height: 45px; } .control-button-unified i { font-size: 1.1rem; } .top-bar { margin-top: 15px; } .top-bar label { font-size: 0.9rem; } .progress-container { height: 10px; } .mic-button { width: 80px; height: 80px; } .mic-button i { font-size: 34px; } .transcript-container { bottom: 200px; width: 90%; } #transcript { font-size: 1rem; } .message { max-width: 85%; padding: 10px 14px; font-size: 0.9rem; } .favorability-text { font-size: 0.75rem; } .control-buttons { gap: 10px; justify-content: space-around; } .kimi-select, .kimi-select-unified, .kimi-input, .kimi-input-unified { font-size: 16px; /* Prevents zoom on iOS */ } } @media (max-width: 600px) { .bg-video { object-fit: cover; object-position: center center; } .content-overlay { padding: 10px; } .control-buttons { gap: 15px; } .chat-button, .settings-button { width: 50px; height: 50px; } .chat-button i, .settings-button i { font-size: 20px; } .top-bar { margin-top: 15px; } .top-bar label { font-size: 0.9rem; } .progress-container { height: 10px; } .mic-button { width: 80px; height: 80px; } .mic-button i { font-size: 34px; } .transcript-container { bottom: 200px; width: 90%; } #transcript { font-size: 1rem; } .message { max-width: 92%; padding: 10px 14px; font-size: 0.9rem; } .favorability-text { font-size: 0.75rem; } .chat-container { top: 10px; right: 10px; left: 10px; width: auto; height: calc(100vh - 20px); transform: translateY(-100vh); transition: all 0.25s ease-out; } .chat-container.visible { transform: translateY(0); } } /* Animation pour l'indicateur d'attente */ .waiting-indicator { display: block; text-align: center; width: 100%; box-sizing: border-box; margin: 6px 0 4px 0; /* discret au-dessus de l'input */ opacity: 0; transition: opacity 0.25s ease-in-out; pointer-events: none; } .waiting-indicator.visible { opacity: 1; } .waiting-indicator span { display: inline-block; width: 8px; height: 8px; margin: 0 2px; background: var(--waiting-indicator-color); border-radius: 50%; opacity: 0.5; animation: waiting-bounce 1.4s infinite both; } .waiting-indicator span:nth-child(2) { animation-delay: 0.2s; } .waiting-indicator span:nth-child(3) { animation-delay: 0.4s; } @keyframes waiting-bounce { 0%, 80%, 100% { transform: scale(0.7); opacity: 0.5; } 40% { transform: scale(1); opacity: 1; } } /* Global typing indicator near mic button */ .global-typing-indicator { display: none; align-items: center; justify-content: center; width: 36px; height: 36px; margin: 0 6px; border-radius: 18px; background: rgba(0, 0, 0, 0.2); backdrop-filter: blur(6px); transition: opacity 0.25s ease-in-out; opacity: 0; } .global-typing-indicator.visible { display: inline-flex; opacity: 1; } .global-typing-indicator span { display: inline-block; width: 6px; height: 6px; margin: 0 1.5px; background: var(--waiting-indicator-color); border-radius: 50%; opacity: 0.6; animation: waiting-bounce 1.4s infinite both; } .global-typing-indicator span:nth-child(2) { animation-delay: 0.2s; } .global-typing-indicator span:nth-child(3) { animation-delay: 0.4s; } /* Animation pour les messages du chat */ @keyframes messageSlideIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }