diff --git "a/kimi-css/kimi-style.css" "b/kimi-css/kimi-style.css" --- "a/kimi-css/kimi-style.css" +++ "b/kimi-css/kimi-style.css" @@ -1,1743 +1,1740 @@ -/* ===== CONSOLIDATED CSS VARIABLES - ENHANCED DYNAMIC THEMING ===== */ -:root { - /* Core Theme Colors - Default Pink Passion */ - --primary-color: #ff6b9d; - --secondary-color: #ffeaa7; - --accent-color: #fd79a8; - --background-overlay: rgba(255, 107, 157, 0.15); - --interface-opacity: 0.7; - --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); - --animations-enabled: 1; - --switch-color: var(--primary-color); - - /* Contrast and Accessibility */ - --contrast-ratio: 4.5; /* WCAG AA standard */ - --text-on-primary: #ffffff; - --text-on-secondary: #222222; - --text-on-accent: #ffffff; - --text-on-background: #ffffff; - --border-opacity: 0.3; - --hover-opacity: 0.15; - --active-opacity: 0.25; - - /* 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)); - --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(40, 44, 52, 0.95); - --select-option-text: white; - --select-option-hover-bg: var(--primary-color); - --select-option-hover-text: var(--text-on-primary); - --select-option-checked-bg: var(--accent-color); - --select-option-checked-text: var(--text-on-accent); - --select-option-disabled-bg: rgba(40, 44, 52, 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: #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)); - --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: 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); - --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); - - /* 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); - --card-text: var(--text-on-background); - --stat-value-color: var(--primary-color); - --stat-label-color: rgba(255, 255, 255, 0.7); - - /* Plugin Cards */ - --plugin-card-bg: linear-gradient(135deg, #22121a 80%, var(--modal-bg) 100%); - --plugin-card-border: var(--primary-color); - --plugin-card-title-color: var(--text-on-background); - --plugin-card-desc-color: #e0cfe6; - --plugin-card-author-color: #bfa6b6; - --plugin-type-badge-bg: var(--accent-color); - --plugin-type-badge-text: var(--text-on-accent); - --plugin-active-badge-bg: linear-gradient(90deg, var(--primary-color), var(--accent-color)); - --plugin-active-badge-text: var(--text-on-primary); - - /* Help Modal */ - --help-modal-bg: var(--modal-bg); - --help-modal-border: var(--modal-border); - --help-content-color: var(--text-on-background); - --help-section-border: rgba(255, 255, 255, 0.1); - --creator-card-bg: rgba(255, 255, 255, 0.05); - --creator-card-border: rgba(255, 255, 255, 0.1); - --creator-avatar-bg: linear-gradient(135deg, var(--primary-color), var(--secondary-color)); - --creator-name-color: var(--primary-color); - --creator-role-bg: linear-gradient(135deg, var(--primary-color), var(--secondary-color)); - --creator-role-color: var(--text-on-secondary); - --philosophy-bg: rgba(255, 154, 158, 0.1); - --philosophy-border: rgba(255, 154, 158, var(--border-opacity)); - --philosophy-border-left: var(--primary-color); - --feature-item-bg: rgba(255, 255, 255, 0.05); - --feature-item-border: rgba(255, 255, 255, 0.1); - --feature-icon-color: #ffeaa7; - --feature-title-color: #ffeaa7; - --feature-text-color: rgba(255, 255, 255, 0.7); - --guide-step-bg: rgba(255, 255, 255, 0.05); - --guide-step-number-bg: rgba(255, 107, 157, var(--hover-opacity)); - --guide-step-number-color: var(--primary-color); - --tip-item-bg: var(--feature-item-bg); - --tip-item-border: var(--feature-item-border); - - /* Unified Scrollbar System */ - --scrollbar-width: 8px; - --scrollbar-track-bg: rgba(255, 255, 255, 0.05); - --scrollbar-thumb-bg: rgba(255, 107, 157, 0.4); - --scrollbar-thumb-hover-bg: rgba(255, 107, 157, 0.6); - --scrollbar-thumb-active-bg: rgba(255, 107, 157, 0.8); - --scrollbar-corner-bg: rgba(255, 255, 255, 0.05); - - /* Model Colors */ - --model-card-bg: var(--card-bg); - --model-card-border: var(--card-border); - --model-card-hover-bg: var(--card-hover-bg); - --model-card-selected-border: var(--primary-color); - --model-card-selected-shadow: 0 0 0 2px rgba(255, 154, 158, var(--border-opacity)); - --model-name-color: var(--text-on-background); - --model-description-color: rgba(255, 255, 255, 0.7); - --model-strength-color: var(--primary-color); - --model-strength-text: var(--text-on-primary); - --model-provider-color: var(--accent-color); - --model-provider-text: var(--text-on-accent); - - /* Text Colors */ - --text-primary: var(--text-on-background); - --text-secondary: #aaa; - --text-muted: rgba(255, 255, 255, 0.6); - - /* 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); - - /* Waiting Indicator */ - --waiting-indicator-color: var(--primary-color); - --loading-spinner-color: var(--primary-color); - - /* Progress Bar */ - --progress-bg: rgba(255, 255, 255, 0.1); - --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.7); - --transcript-text: var(--text-on-background); - --transcript-border: var(--primary-color); -} - -/* ===== OPTIMIZED THEME VARIATIONS ===== */ -[data-theme="blue"] { - --primary-color: #74b9ff; - --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; - --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; - - /* Scrollbar */ - --scrollbar-thumb-bg: rgba(116, 185, 255, 0.4); - --scrollbar-thumb-hover-bg: rgba(116, 185, 255, 0.6); - --scrollbar-thumb-active-bg: rgba(116, 185, 255, 0.8); - - /* 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; - --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; - --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; - - /* Scrollbar */ - --scrollbar-thumb-bg: rgba(162, 155, 254, 0.4); - --scrollbar-thumb-hover-bg: rgba(162, 155, 254, 0.6); - --scrollbar-thumb-active-bg: rgba(162, 155, 254, 0.8); - - /* 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; - --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; - - /* Scrollbar */ - --scrollbar-thumb-bg: rgba(39, 174, 96, 0.4); - --scrollbar-thumb-hover-bg: rgba(39, 174, 96, 0.6); - --scrollbar-thumb-active-bg: rgba(39, 174, 96, 0.8); - - /* 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; - --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: #23262f; - --chat-message-user-text: var(--text-on-background); - --chat-message-kimi-bg: #181a20; - --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; - - /* Scrollbar */ - --scrollbar-track-bg: rgba(255, 255, 255, 0.02); - --scrollbar-thumb-bg: rgba(94, 96, 206, 0.4); - --scrollbar-thumb-hover-bg: rgba(94, 96, 206, 0.6); - --scrollbar-thumb-active-bg: rgba(94, 96, 206, 0.8); - - /* 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 ===== */ -/* Disable animations when requested */ -body.no-animations *, -[data-animations="false"] * { - animation: none !important; - transition: none !important; -} - -/* Important: Keep mic button animations even when animations are disabled */ -body.no-animations .mic-button, -body.no-animations .mic-button *, -body.no-animations .mic-button::after, -[data-animations="false"] .mic-button, -[data-animations="false"] .mic-button *, -[data-animations="false"] .mic-button::after { - animation: revert !important; - transition: revert !important; -} - -/* Keep loading screen animations */ -body.no-animations #loading-screen, -body.no-animations #loading-screen *, -[data-animations="false"] #loading-screen, -[data-animations="false"] #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; -} - -/* ===== 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 0.3s cubic-bezier(0.4, 0, 0.2, 1); - background-color: #1a1a1a; - will-change: opacity; - backface-visibility: hidden; -} - -.bg-video.transitioning { - opacity: 0; - transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1); - pointer-events: none; -} - -@media (max-width: 600px) { - .bg-video { - object-fit: cover; - object-position: center center; - } -} - -.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; - 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); -} - -.transcript-container.visible { - opacity: 1; -} - -#transcript { - font-size: 1.2rem; - color: var(--transcript-text); - text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.7); -} - -/* Interface de Chat avec Kimi - STYLE UNIFIÉ */ -.chat-container { - position: fixed; - top: 20px; - right: 20px; - width: 350px; - max-width: calc(100vw - 40px); - height: 500px; - 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; - z-index: 1000; - overflow: hidden; - transform: translateX(400px); - opacity: 0; - transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); -} - -.chat-container.visible { - display: flex; - flex-direction: column; - transform: translateX(0); - opacity: 1; -} - -.chat-header { - padding: 15px 20px; - border-bottom: 1px solid rgba(255, 255, 255, 0.1); - display: flex; - justify-content: space-between; - align-items: center; - background: var(--chat-header-bg); -} - -.chat-header h3 { - margin: 0; - color: var(--chat-text); - font-size: 1.1rem; - font-weight: 600; -} - -.chat-header h3 i { - margin-right: 8px; - color: var(--accent-color); -} - -.chat-toggle { - background: none; - border: none; - color: var(--chat-text); - cursor: pointer; - width: 30px; - height: 30px; - border-radius: 50%; - display: flex; - align-items: center; - justify-content: center; - transition: all 0.3s ease; - font-size: 1.1rem; -} - -.chat-toggle:hover { - background: rgba(255, 255, 255, 0.1); - transform: scale(1.1); -} - -.chat-messages { - flex: 1; - padding: 18px; - overflow-y: auto; - display: flex; - flex-direction: column; - gap: 15px; -} - -.message { - max-width: 92%; - padding: 10px 14px; - border-radius: 16px; - word-wrap: break-word; - position: relative; -} - -.message.user { - align-self: flex-end; - background: var(--chat-message-user-bg); - color: var(--chat-message-user-text); - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2); -} - -.message.kimi { - align-self: flex-start; - background: var(--chat-message-kimi-bg); - color: var(--chat-message-kimi-text); - border: 1px solid rgba(255, 255, 255, 0.1); -} - -.message-time { - font-size: 0.75rem; - opacity: 0.7; - margin-top: 5px; -} - -.chat-input-container { - padding: 15px 20px; - background: var(--chat-header-bg); - border-top: 1px solid rgba(255, 255, 255, 0.1); - display: flex; - gap: 10px; - align-items: center; -} - -#chat-input { - flex: 1; - padding: 12px 15px; - background: var(--chat-input-bg); - border: 1px solid rgba(255, 255, 255, 0.2); - border-radius: 25px; - color: var(--chat-input-text); - font-size: 0.95rem; - outline: none; - transition: all 0.3s ease; -} - -#chat-input:focus { - background: rgba(255, 255, 255, 0.15); - border-color: var(--accent-color); - box-shadow: 0 0 10px var(--primary-color); -} - -#chat-input::placeholder { - color: var(--chat-input-placeholder); -} - -#send-button { - width: 45px; - height: 45px; - background: var(--chat-message-user-bg); - border: none; - border-radius: 50%; - color: white; - cursor: pointer; - display: flex; - justify-content: center; - align-items: center; - transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2); - backdrop-filter: blur(10px); - border: 1px solid rgba(255, 255, 255, 0.1); -} - -#send-button:hover { - transform: scale(1.1); - box-shadow: - var(--text-glow), - 0 4px 15px rgba(0, 0, 0, 0.3); - background: var(--accent-color); -} - -#send-button:active { - transform: scale(0.95); - transition: all 0.1s ease; -} - -#chat-delete { - background: none; - border: none; - color: #d9534f; - font-size: 1.2em; - cursor: pointer; - margin-left: 8px; - transition: color 0.2s; -} - -#chat-delete:hover { - color: #b52a1a; -} - -#chat-delete i { - pointer-events: none; -} - -.delete-message-btn { - background: none; - border: none; - color: #aaa; - cursor: pointer; - padding: 0 0 0 8px; - display: flex; - align-items: center; - transition: color 0.2s; -} -.delete-message-btn:hover { - color: #e74c3c; -} -.delete-message-btn i { - pointer-events: none; -} - -/* ===== 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; -} - -/* Mask sensitive values without using input type=password to avoid save prompts */ -.kimi-input.masked { - -webkit-text-security: disc; /* non-standard but widely supported in Chromium/WebKit */ - filter: blur(6px); /* fallback for browsers without text-security (e.g., Firefox) */ -} - -.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; - } -} - -/* ===== CONSOLIDATED RESPONSIVE DESIGN ===== */ -@media (max-width: 768px) { - .content-overlay { - padding: 20px; - } - - .chat-container { - top: 10px; - right: 10px; - left: 10px; - width: auto; - max-width: none; - height: calc(100vh - 20px); - max-height: none; - border-radius: 10px; - } - - .chat-header { - padding: 12px 15px; - } - - .chat-header h3 { - font-size: 1rem; - } - - .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) { - .content-overlay { - padding: 10px; - } - - .chat-container { - top: 10px; - right: 10px; - left: 10px; - width: auto; - max-width: none; - height: calc(100vh - 20px); - max-height: none; - border-radius: 10px; - } - - .chat-header { - padding: 12px 15px; - } - - .chat-header h3 { - font-size: 1rem; - } - - .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; - } -} - -/* 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; -} +/* ===== CONSOLIDATED CSS VARIABLES - ENHANCED DYNAMIC THEMING ===== */ +:root { + /* Core Theme Colors - Default Pink Passion */ + --primary-color: #ff6b9d; + --secondary-color: #ffeaa7; + --accent-color: #fd79a8; + --background-overlay: rgba(255, 107, 157, 0.15); + --interface-opacity: 0.7; + --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); + --animations-enabled: 1; + --switch-color: var(--primary-color); + + /* Contrast and Accessibility */ + --contrast-ratio: 4.5; /* WCAG AA standard */ + --text-on-primary: #ffffff; + --text-on-secondary: #222222; + --text-on-accent: #ffffff; + --text-on-background: #ffffff; + --border-opacity: 0.3; + --hover-opacity: 0.15; + --active-opacity: 0.25; + + /* 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)); + --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(40, 44, 52, 0.95); + --select-option-text: white; + --select-option-hover-bg: var(--primary-color); + --select-option-hover-text: var(--text-on-primary); + --select-option-checked-bg: var(--accent-color); + --select-option-checked-text: var(--text-on-accent); + --select-option-disabled-bg: rgba(40, 44, 52, 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: #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)); + --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: 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); + --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.05); + --card-border: rgba(255, 255, 255, 0.1); + --card-hover-bg: rgba(255, 255, 255, 0.08); + --card-text: var(--text-on-background); + --stat-value-color: var(--primary-color); + --stat-label-color: rgba(255, 255, 255, 0.7); + + /* Plugin Cards */ + --plugin-card-bg: linear-gradient(135deg, #22121a 80%, var(--modal-bg) 100%); + --plugin-card-border: var(--primary-color); + --plugin-card-title-color: var(--text-on-background); + --plugin-card-desc-color: #e0cfe6; + --plugin-card-author-color: #bfa6b6; + --plugin-type-badge-bg: var(--accent-color); + --plugin-type-badge-text: var(--text-on-accent); + --plugin-active-badge-bg: linear-gradient(90deg, var(--primary-color), var(--accent-color)); + --plugin-active-badge-text: var(--text-on-primary); + + /* Help Modal */ + --help-modal-bg: var(--modal-bg); + --help-modal-border: var(--modal-border); + --help-content-color: var(--text-on-background); + --help-section-border: rgba(255, 255, 255, 0.1); + --creator-card-bg: rgba(255, 255, 255, 0.05); + --creator-card-border: rgba(255, 255, 255, 0.1); + --creator-avatar-bg: linear-gradient(135deg, var(--primary-color), var(--secondary-color)); + --creator-name-color: var(--primary-color); + --creator-role-bg: linear-gradient(135deg, var(--primary-color), var(--secondary-color)); + --creator-role-color: var(--text-on-secondary); + --philosophy-bg: rgba(255, 154, 158, 0.1); + --philosophy-border: rgba(255, 154, 158, var(--border-opacity)); + --philosophy-border-left: var(--primary-color); + --feature-item-bg: rgba(255, 255, 255, 0.05); + --feature-item-border: rgba(255, 255, 255, 0.1); + --feature-icon-color: #ffeaa7; + --feature-title-color: #ffeaa7; + --feature-text-color: rgba(255, 255, 255, 0.7); + --guide-step-bg: rgba(255, 255, 255, 0.05); + --guide-step-number-bg: rgba(255, 107, 157, var(--hover-opacity)); + --guide-step-number-color: var(--primary-color); + --tip-item-bg: var(--feature-item-bg); + --tip-item-border: var(--feature-item-border); + + /* Unified Scrollbar System */ + --scrollbar-width: 8px; + --scrollbar-track-bg: rgba(255, 255, 255, 0.05); + --scrollbar-thumb-bg: rgba(255, 107, 157, 0.4); + --scrollbar-thumb-hover-bg: rgba(255, 107, 157, 0.6); + --scrollbar-thumb-active-bg: rgba(255, 107, 157, 0.8); + --scrollbar-corner-bg: rgba(255, 255, 255, 0.05); + + /* Model Colors */ + --model-card-bg: var(--card-bg); + --model-card-border: var(--card-border); + --model-card-hover-bg: var(--card-hover-bg); + --model-card-selected-border: var(--primary-color); + --model-card-selected-shadow: 0 0 0 2px rgba(255, 154, 158, var(--border-opacity)); + --model-name-color: var(--text-on-background); + --model-description-color: rgba(255, 255, 255, 0.7); + --model-strength-color: var(--primary-color); + --model-strength-text: var(--text-on-primary); + --model-provider-color: var(--accent-color); + --model-provider-text: var(--text-on-accent); + + /* Text Colors */ + --text-primary: var(--text-on-background); + --text-secondary: #aaa; + --text-muted: rgba(255, 255, 255, 0.6); + + /* 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); + + /* Waiting Indicator */ + --waiting-indicator-color: var(--primary-color); + --loading-spinner-color: var(--primary-color); + + /* Progress Bar */ + --progress-bg: rgba(255, 255, 255, 0.1); + --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.7); + --transcript-text: var(--text-on-background); + --transcript-border: var(--primary-color); +} + +/* ===== OPTIMIZED THEME VARIATIONS ===== */ +[data-theme="blue"] { + --primary-color: #74b9ff; + --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; + --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; + + /* Scrollbar */ + --scrollbar-thumb-bg: rgba(116, 185, 255, 0.4); + --scrollbar-thumb-hover-bg: rgba(116, 185, 255, 0.6); + --scrollbar-thumb-active-bg: rgba(116, 185, 255, 0.8); + + /* 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; + --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; + --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; + + /* Scrollbar */ + --scrollbar-thumb-bg: rgba(162, 155, 254, 0.4); + --scrollbar-thumb-hover-bg: rgba(162, 155, 254, 0.6); + --scrollbar-thumb-active-bg: rgba(162, 155, 254, 0.8); + + /* 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; + --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; + + /* Scrollbar */ + --scrollbar-thumb-bg: rgba(39, 174, 96, 0.4); + --scrollbar-thumb-hover-bg: rgba(39, 174, 96, 0.6); + --scrollbar-thumb-active-bg: rgba(39, 174, 96, 0.8); + + /* 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; + --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: #23262f; + --chat-message-user-text: var(--text-on-background); + --chat-message-kimi-bg: #181a20; + --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; + + /* Scrollbar */ + --scrollbar-track-bg: rgba(255, 255, 255, 0.02); + --scrollbar-thumb-bg: rgba(94, 96, 206, 0.4); + --scrollbar-thumb-hover-bg: rgba(94, 96, 206, 0.6); + --scrollbar-thumb-active-bg: rgba(94, 96, 206, 0.8); + + /* 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 ===== */ +/* Disable animations when requested */ +body.no-animations *, +[data-animations="false"] * { + animation: none !important; + transition: none !important; +} + +/* Important: Keep mic button animations even when animations are disabled */ +body.no-animations .mic-button, +body.no-animations .mic-button *, +body.no-animations .mic-button::after, +[data-animations="false"] .mic-button, +[data-animations="false"] .mic-button *, +[data-animations="false"] .mic-button::after { + animation: revert !important; + transition: revert !important; +} + +/* Keep loading screen animations */ +body.no-animations #loading-screen, +body.no-animations #loading-screen *, +[data-animations="false"] #loading-screen, +[data-animations="false"] #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; +} + +/* ===== 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; +} + +@media (max-width: 600px) { + .bg-video { + object-fit: cover; + object-position: center center; + } +} + +.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; + 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); +} + +.transcript-container.visible { + opacity: 1; +} + +#transcript { + font-size: 1.2rem; + color: var(--transcript-text); + text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.7); +} + +/* Interface de Chat avec Kimi - STYLE UNIFIÉ */ +.chat-container { + position: fixed; + top: 20px; + right: 20px; + width: 350px; + max-width: calc(100vw - 40px); + height: 500px; + 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; + z-index: 1000; + overflow: hidden; + transform: translateX(400px); + opacity: 0; + transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); +} + +.chat-container.visible { + display: flex; + flex-direction: column; + transform: translateX(0); + opacity: 1; +} + +.chat-header { + padding: 15px 20px; + border-bottom: 1px solid rgba(255, 255, 255, 0.1); + display: flex; + justify-content: space-between; + align-items: center; + background: var(--chat-header-bg); +} + +.chat-header h3 { + margin: 0; + color: var(--chat-text); + font-size: 1.1rem; + font-weight: 600; +} + +.chat-header h3 i { + margin-right: 8px; + color: var(--accent-color); +} + +.chat-toggle { + background: none; + border: none; + color: var(--chat-text); + cursor: pointer; + width: 30px; + height: 30px; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + transition: all 0.3s ease; + font-size: 1.1rem; +} + +.chat-toggle:hover { + background: rgba(255, 255, 255, 0.1); + transform: scale(1.1); +} + +.chat-messages { + flex: 1; + padding: 18px; + overflow-y: auto; + display: flex; + flex-direction: column; + gap: 15px; +} + +.message { + max-width: 92%; + padding: 10px 14px; + border-radius: 16px; + word-wrap: break-word; + position: relative; +} + +.message.user { + align-self: flex-end; + background: var(--chat-message-user-bg); + color: var(--chat-message-user-text); + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2); +} + +.message.kimi { + align-self: flex-start; + background: var(--chat-message-kimi-bg); + color: var(--chat-message-kimi-text); + border: 1px solid rgba(255, 255, 255, 0.1); +} + +.message-time { + font-size: 0.75rem; + opacity: 0.7; + margin-top: 5px; +} + +.chat-input-container { + padding: 15px 20px; + background: var(--chat-header-bg); + border-top: 1px solid rgba(255, 255, 255, 0.1); + display: flex; + gap: 10px; + align-items: center; +} + +#chat-input { + flex: 1; + padding: 12px 15px; + background: var(--chat-input-bg); + border: 1px solid rgba(255, 255, 255, 0.2); + border-radius: 25px; + color: var(--chat-input-text); + font-size: 0.95rem; + outline: none; + transition: all 0.3s ease; +} + +#chat-input:focus { + background: rgba(255, 255, 255, 0.15); + border-color: var(--accent-color); + box-shadow: 0 0 10px var(--primary-color); +} + +#chat-input::placeholder { + color: var(--chat-input-placeholder); +} + +#send-button { + width: 45px; + height: 45px; + background: var(--chat-message-user-bg); + border: none; + border-radius: 50%; + color: white; + cursor: pointer; + display: flex; + justify-content: center; + align-items: center; + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2); + backdrop-filter: blur(10px); + border: 1px solid rgba(255, 255, 255, 0.1); +} + +#send-button:hover { + transform: scale(1.1); + box-shadow: + var(--text-glow), + 0 4px 15px rgba(0, 0, 0, 0.3); + background: var(--accent-color); +} + +#send-button:active { + transform: scale(0.95); + transition: all 0.1s ease; +} + +#chat-delete { + background: none; + border: none; + color: #d9534f; + font-size: 1.2em; + cursor: pointer; + margin-left: 8px; + transition: color 0.2s; +} + +#chat-delete:hover { + color: #b52a1a; +} + +#chat-delete i { + pointer-events: none; +} + +.delete-message-btn { + background: none; + border: none; + color: #aaa; + cursor: pointer; + padding: 0 0 0 8px; + display: flex; + align-items: center; + transition: color 0.2s; +} +.delete-message-btn:hover { + color: #e74c3c; +} +.delete-message-btn i { + pointer-events: none; +} + +/* ===== 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; + } +} + +/* ===== CONSOLIDATED RESPONSIVE DESIGN ===== */ +@media (max-width: 768px) { + .content-overlay { + padding: 20px; + } + + .chat-container { + top: 10px; + right: 10px; + left: 10px; + width: auto; + max-width: none; + height: calc(100vh - 20px); + max-height: none; + border-radius: 10px; + } + + .chat-header { + padding: 12px 15px; + } + + .chat-header h3 { + font-size: 1rem; + } + + .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) { + .content-overlay { + padding: 10px; + } + + .chat-container { + top: 10px; + right: 10px; + left: 10px; + width: auto; + max-width: none; + height: calc(100vh - 20px); + max-height: none; + border-radius: 10px; + } + + .chat-header { + padding: 12px 15px; + } + + .chat-header h3 { + font-size: 1rem; + } + + .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; + } +} + +/* 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; +}