* { box-sizing: border-box; margin: 0; padding: 0; } :root { --bg: #0f0f1a; --fg: #e8e8ec; --muted: #8a8a9a; --accent: #4ade80; --accent-dim: #22c55e; --card: #181826; --border: #2a2a3e; --user-msg: #1e3a2e; --assistant-msg: #1a1a2e; } @media (prefers-color-scheme: light) { :root { --bg: #f5f5f7; --fg: #1d1d1f; --muted: #6e6e73; --card: #ffffff; --border: #d2d2d7; --user-msg: #e8f5e9; --assistant-msg: #f5f5f7; } } html, body { height: 100%; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; background: var(--bg); color: var(--fg); } .app-container { display: flex; flex-direction: column; height: 100vh; max-width: 600px; margin: 0 auto; } .header { padding: 16px; text-align: center; border-bottom: 1px solid var(--border); } .header h1 { font-size: 1.5rem; font-weight: 600; letter-spacing: -0.02em; } .warning { margin-top: 8px; font-size: 0.8rem; color: #fbbf24; } .hidden { display: none !important; } .main { flex: 1; display: flex; flex-direction: column; overflow: hidden; } .chat-container { flex: 1; overflow-y: auto; padding: 16px; display: flex; flex-direction: column; gap: 12px; } .message { max-width: 85%; padding: 12px 16px; border-radius: 16px; line-height: 1.5; font-size: 0.95rem; animation: fadeIn 0.2s ease; } @keyframes fadeIn { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: translateY(0); } } .message.user { align-self: flex-end; background: var(--user-msg); border-bottom-right-radius: 4px; } .message.assistant { align-self: flex-start; background: var(--assistant-msg); border: 1px solid var(--border); border-bottom-left-radius: 4px; } .message.interim { opacity: 0.6; font-style: italic; } .input-area { padding: 12px 16px; border-top: 1px solid var(--border); background: var(--bg); } .input-wrapper { display: flex; align-items: flex-end; gap: 8px; } .mic-btn { flex-shrink: 0; width: 44px; height: 44px; border-radius: 50%; border: none; background: var(--card); color: var(--fg); display: flex; align-items: center; justify-content: center; cursor: pointer; transition: all 0.2s; } .mic-btn:hover:not(:disabled) { background: var(--border); } .mic-btn.listening { background: var(--accent); color: #000; animation: pulse 1.5s infinite; } @keyframes pulse { 0%, 100% { box-shadow: 0 0 0 0 rgba(74, 222, 128, 0.5); } 50% { box-shadow: 0 0 0 10px rgba(74, 222, 128, 0); } } .mic-btn:disabled { opacity: 0.5; cursor: not-allowed; } .mic-icon.listening { display: none; } .mic-btn.listening .mic-icon:not(.listening) { display: none; } .mic-btn.listening .mic-icon.listening { display: block; } .message-input { flex: 1; min-height: 44px; max-height: 120px; padding: 10px 14px; border: 1px solid var(--border); border-radius: 22px; background: var(--card); color: var(--fg); font-size: 1rem; line-height: 1.5; resize: none; outline: none; font-family: inherit; } .message-input:focus { border-color: var(--accent); } .message-input::placeholder { color: var(--muted); } .send-btn { flex-shrink: 0; width: 44px; height: 44px; border-radius: 50%; border: none; background: var(--accent); color: #000; display: flex; align-items: center; justify-content: center; cursor: pointer; transition: background 0.2s; } .send-btn:hover { background: var(--accent-dim); } @media (max-width: 480px) { .message { max-width: 90%; font-size: 1rem; } }