/* CSS Variables (avec valeurs de secours) */ :root { --primary-500: var(--primary-500, #6366F1); /* Indigo */ --secondary-500: var(--secondary-500, #22C55E); /* Green */ } /* Mise en page globale */ * { box-sizing: border-box; } html, body { height: 100%; } body { margin: 0; font-family: Inter, ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, "Apple Color Emoji", "Segoe UI Emoji"; } /* Container principal en 3 colonnes */ .container { display: flex; height: 100vh; } /* Colonne 1 : Sidebar */ .sidebar { width: 20%; min-width: 240px; background: rgb(248 250 252); /* slate-50 */ border-right: 1px solid rgb(226 232 240); /* slate-200 */ padding: 16px; display: flex; flex-direction: column; gap: 16px; } .dark .sidebar { background: rgb(15 23 42); /* slate-900 */ border-right-color: rgb(30 41 59); /* slate-800 */ } .logo { display: flex; align-items: center; gap: 8px; font-weight: 700; font-size: 18px; color: rgb(15 23 42); text-decoration: none; } .dark .logo { color: rgb(248 250 252); } .menu { display: flex; flex-direction: column; gap: 8px; } .btn { width: 100%; display: inline-flex; align-items: center; justify-content: flex-start; gap: 8px; padding: 10px 12px; background: rgb(241 245 249); /* slate-100 */ color: rgb(15 23 42); border: 1px solid rgb(226 232 240); border-radius: 8px; cursor: pointer; } .btn:hover { background: rgb(226 232 240); } /* slate-200 */ .dark .btn { background: rgb(30 41 59); /* slate-800 */ color: rgb(226 232 240); border-color: rgb(51 65 85); /* slate-700 */ } .dark .btn:hover { background: rgb(51 65 85); } .projects h3 { font-size: 14px; color: rgb(100 116 139); /* slate-500 */ margin-bottom: 8px; text-transform: uppercase; letter-spacing: 0.06em; } .dark .projects h3 { color: rgb(148 163 184); } .project-list { list-style: none; display: flex; flex-direction: column; gap: 6px; padding: 0; margin: 0; } .project-list li { display: flex; align-items: center; justify-content: space-between; padding: 8px 10px; border: 1px solid rgb(226 232 240); border-radius: 8px; background: white; } .dark .project-list li { background: rgb(30 41 59); border-color: rgb(51 65 85); } .project-list .actions { display: flex; gap: 6px; } .project-list button { padding: 4px 6px; border: 1px solid rgb(226 232 240); background: rgb(248 250 252); border-radius: 6px; cursor: pointer; } .dark .project-list button { background: rgb(15 23 42); border-color: rgb(51 65 85); } /* Colonne 2 : Chat */ .chat { width: 45%; min-width: 320px; display: flex; flex-direction: column; padding: 16px; gap: 12px; } .chat-header h2 { font-size: 18px; margin: 0; } .activity-monitor { display: flex; align-items: center; gap: 8px; font-size: 12px; color: rgb(100 116 139); } .dark .activity-monitor { color: rgb(148 163 184); } .dot { width: 8px; height: 8px; border-radius: 9999px; background: rgb(34 197 94); /* emerald-500 */ display: inline-block; } .chat-messages { flex: 1; background: rgb(255 255 255); border: 1px solid rgb(226 232 240); border-radius: 12px; padding: 12px; overflow-y: auto; } .dark .chat-messages { background: rgb(2 6 23); /* slate-950 */ border-color: rgb(30 41 59); } .msg { display: flex; gap: 10px; margin-bottom: 12px; } .msg-ai .avatar { width: 32px; height: 32px; border-radius: 9999px; display: grid; place-items: center; background: var(--primary-500); color: white; } .msg-user { justify-content: flex-end; } .msg-user .bubble { background: var(--secondary-500); color: white; border-bottom-right-radius: 4px; } .msg-ai .bubble { background: rgb(241 245 249); color: rgb(15 23 42); border-bottom-left-radius: 4px; } .dark .msg-ai .bubble { background: rgb(30 41 59); color: rgb(226 232 240); } .bubble { max-width: 70%; padding: 10px 12px; border-radius: 12px; box-shadow: 0 1px 0 rgba(0,0,0,.04); } .chat-input { display: grid; grid-template-columns: auto auto 1fr auto auto; gap: 8px; align-items: center; } .chat-input input { padding: 10px 12px; border-radius: 8px; border: 1px solid rgb(226 232 240); background: white; outline: none; } .dark .chat-input input { background: rgb(2 6 23); border-color: rgb(30 41 59); color: rgb(226 232 240); } .chat-input button { padding: 10px 12px; border-radius: 8px; border: 1px solid rgb(226 232 240); background: rgb(248 250 252); cursor: pointer; } .dark .chat-input button { background: rgb(15 23 42); border-color: rgb(30 41 59); } .chat-input button:hover { background: rgb(241 245 249); } .dark .chat-input button:hover { background: rgb(30 41 59); } /* Micro button listening state */ #micBtn.listening { background: rgb(239, 68, 68); /* red-500 */ border-color: rgb(239, 68, 68); animation: micPulse 1.2s infinite; } @keyframes micPulse { 0% { transform: scale(1); box-shadow: 0 0 0 0 rgba(239,68,68,0.6); } 70% { transform: scale(1.03); box-shadow: 0 0 0 10px rgba(239,68,68,0); } 100% { transform: scale(1); box-shadow: 0 0 0 0 rgba(239,68,68,0); } } /* Small status dot improvements (used for activity too) */ .dot.listening { background: rgb(234,179,8); } /* amber-500 */ /* Colonne 3 : Output */ .output { width: 35%; min-width: 300px; background: rgb(252 252 252); border-left: 1px solid rgb(226 232 240); display: flex; flex-direction: column; padding: 16px; gap: 12px; } .dark .output { background: rgb(12 16 24); border-left-color: rgb(30 41 59); } .output-tabs { display: grid; grid-template-columns: repeat(5, 1fr); gap: 8px; } .output-tabs .tab-btn { padding: 8px; font-size: 12px; background: rgb(232 232 232); border: none; cursor: pointer; border-radius: 8px; display: inline-flex; align-items: center; justify-content: center; gap: 6px; } .output-tabs .tab-btn.active { background: var(--primary-500); color: white; } .code-output { flex: 1; background: #000; color: #0f0; padding: 12px; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; overflow-y: auto; border-radius: 10px; border: 1px solid rgb(30 41 59); } .code-output code { white-space: pre; display: block; } .result-output { background: #fff; border: 1px solid rgb(226 232 240); padding: 12px; text-align: center; border-radius: 10px; } .dark .result-output { background: rgb(2 6 23); border-color: rgb(30 41 59); } /* Thème (mode undefined = fallback par défaut déjà appliqué) */ .theme-toggle { border: 1px solid rgb(226 232 240); background: rgb(248 250 252); color: rgb(15 23 42); padding: 8px 10px; border-radius: 8px; cursor: pointer; } .dark .theme-toggle { background: rgb(15 23 42); border-color: rgb(30 41 59); color: rgb(226 232 240); } /* Scrollbar (Webkit) */ .chat-messages::-webkit-scrollbar, .code-output::-webkit-scrollbar { width: 10px; } .chat-messages::-webkit-scrollbar-thumb, .code-output::-webkit-scrollbar-thumb { background: rgb(226 232 240); border-radius: 8px; } .dark .chat-messages::-webkit-scrollbar-thumb, .dark .code-output::-webkit-scrollbar-thumb { background: rgb(51 65 85); } /* Responsive */ @media (max-width: 1100px) { .container { flex-direction: column; } .sidebar { width: 100%; border-right: none; border-bottom: 1px solid rgb(226 232 240); } .chat { width: 100%; } .output { width: 100%; } }