Virtual-Kimi / kimi-css /kimi-style.css
VirtualKimi's picture
Upload 34 files
bcbb712 verified
/* ===== 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: 580px;
min-width: 280px;
max-height: 400px;
min-height: 100px;
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;
z-index: 100;
}
.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; /* Espacement entre lignes dans un mΓͺme paragraphe */
white-space: normal; /* Plus besoin de pre-line avec les <p> */
animation: messageSlideIn 0.3s ease-out;
}
/* ContrΓ΄le de l'espacement entre paragraphes (sauts de ligne) */
.message p {
margin: 0 0 0.8em 0; /* Espacement entre paragraphes */
}
.message p:last-child {
margin-bottom: 0; /* Pas d'espacement après le dernier paragraphe */
}
.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: 12px;
}
.mic-button {
width: 80px;
height: 80px;
}
.mic-button i {
font-size: 34px;
}
.transcript-container {
bottom: 200px;
width: 90%;
max-height: 400px;
padding: 12px;
}
#transcript {
font-size: 1rem;
line-height: 1.4;
}
.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: 12px;
}
.mic-button {
width: 80px;
height: 80px;
}
.mic-button i {
font-size: 34px;
}
.transcript-container {
bottom: 180px;
width: 95%;
max-height: 300px;
padding: 10px;
left: 50%;
transform: translateX(-50%);
}
#transcript {
font-size: 0.9rem;
line-height: 1.3;
}
.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);
}
}
/* ===== TABLET SPECIFIC STYLES ===== */
@media (min-width: 601px) and (max-width: 1024px) {
.transcript-container {
bottom: 200px;
width: 85%;
max-height: 350px;
padding: 15px;
max-width: 500px;
}
#transcript {
font-size: 1.1rem;
line-height: 1.4;
}
}
/* ===== VERY SMALL SCREENS ===== */
@media (max-width: 400px) {
.transcript-container {
bottom: 160px;
width: 98%;
max-height: 250px;
padding: 8px;
border-radius: 8px;
}
#transcript {
font-size: 0.85rem;
line-height: 1.3;
}
}
/* ===== VERY LARGE SCREENS ===== */
@media (min-width: 1400px) {
.transcript-container {
max-width: 600px;
max-height: 500px;
padding: 20px;
bottom: 200px;
}
#transcript {
font-size: 1.3rem;
line-height: 1.5;
}
}
/* ===== LANDSCAPE MODE ON MOBILE ===== */
@media (max-width: 768px) and (orientation: landscape) {
.transcript-container {
bottom: 120px;
max-height: 200px;
width: 70%;
max-width: 400px;
}
#transcript {
font-size: 0.9rem;
line-height: 1.3;
}
}
/* 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);
}
}