body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif; max-width: 900px; margin: 0 auto; padding: 20px; background: #f5f5f5; } #chatContainer { display: flex; flex-direction: column; height: 95vh; background: white; border-radius: 10px; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); overflow: hidden; } #header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 15px 20px; font-size: 1.2em; display: flex; justify-content: space-between; align-items: center; } #chatLog { flex: 1; overflow-y: auto; padding: 20px; background: #fafafa; } .message { margin-bottom: 25px; animation: fadeIn 0.3s ease-in; } .message-user { background: #e3f2fd; border-left: 4px solid #2196f3; padding: 12px 15px; border-radius: 0 8px 8px 0; margin-left: 0; margin-right: 40px; } .message-assistant { background: white; border: 1px solid #e0e0e0; border-radius: 8px; padding: 15px; margin-right: 0; margin-left: 40px; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05); } .message-header { display: flex; align-items: center; margin-bottom: 12px; font-weight: 600; } .message-header.user { color: #1976d2; } .message-header.assistant { color: #388e3c; } .avatar { width: 28px; height: 28px; border-radius: 50%; margin-right: 10px; display: flex; align-items: center; justify-content: center; font-size: 14px; } .user-avatar { background: #2196f3; color: white; } .assistant-avatar { background: #4caf50; color: white; } #inputArea { border-top: 1px solid #e0e0e0; padding: 15px; background: white; display: flex; flex-direction: column; gap: 10px; } #userInput { width: 100%; padding: 16px 18px; border: 2px solid #ddd; border-radius: 10px; font-size: 16px; resize: none; min-height: 100px; max-height: 300px; font-family: inherit; line-height: 1.6; box-sizing: border-box; } #userInput:focus { outline: none; border-color: #667eea; box-shadow: 0 0 0 2px rgba(102, 126, 234, 0.1); } #sendBtn { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; border: none; border-radius: 8px; padding: 12px 24px; font-weight: 600; cursor: pointer; transition: transform 0.2s, opacity 0.2s; height: 48px; } #sendBtn:hover:not(:disabled) { transform: translateY(-1px); opacity: 0.95; } #sendBtn:disabled { background: #ccc; cursor: not-allowed; } .typing-indicator { display: flex; align-items: center; gap: 4px; padding: 10px 15px; color: #666; } .typing-dot { width: 8px; height: 8px; background: #4caf50; border-radius: 50%; animation: typing 1.4s infinite; } .typing-dot:nth-child(2) { animation-delay: 0.2s; } .typing-dot:nth-child(3) { animation-delay: 0.4s; } @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } @keyframes typing { 0%, 60%, 100% { transform: translateY(0); } 30% { transform: translateY(-6px); } } .streaming-cursor { display: inline-block; width: 8px; height: 20px; background-color: #4caf50; margin-left: 2px; animation: blink 1s infinite; vertical-align: middle; } @keyframes blink { 0%, 50% { opacity: 1; } 51%, 100% { opacity: 0; } } .thinking-block { margin: 10px 0; border-left: 3px solid #ff9800; background: #fff3e0; border-radius: 6px; overflow: hidden; } .thinking-header { padding: 8px 12px; background: #ffe0b2; cursor: pointer; user-select: none; display: flex; align-items: center; gap: 8px; font-weight: 600; color: #e65100; font-size: 0.9em; } .thinking-header:hover { background: #ffcc80; } .thinking-toggle { transition: transform 0.2s; display: inline-block; } .thinking-toggle.collapsed { transform: rotate(-90deg); } .thinking-content { padding: 12px; color: #5d4037; font-size: 0.9em; line-height: 1.5; border-top: 1px solid #ffcc80; } .thinking-content.hidden { display: none; } .controls { display: flex; gap: 10px; margin-top: 10px; align-items: center; } .control-btn { padding: 6px 12px; background: #f5f5f5; border: 1px solid #ddd; border-radius: 4px; cursor: pointer; font-size: 12px; } .control-btn:hover { background: #e9e9e9; } #modelInfo { font-size: 12px; color: #666; margin-left: auto; } .markdown-content { color: #24292f; font-size: 15px; line-height: 1.6; } .markdown-content h1, .markdown-content h2, .markdown-content h3 { color: #1a1a1a; border-bottom: 1px solid #eaecef; padding-bottom: 0.3em; margin-top: 1.5em; margin-bottom: 0.8em; } .markdown-content h1 { font-size: 1.8em; } .markdown-content h2 { font-size: 1.5em; } .markdown-content h3 { font-size: 1.25em; } .markdown-content p { margin: 0.8em 0; color: #2d3339; } .markdown-content code { background-color: #f6f8fa; color: #d63384; padding: 0.2em 0.4em; border-radius: 3px; font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace; font-size: 0.9em; user-select: text; } .markdown-content pre { background-color: #0d1117; color: #c9d1d9; padding: 1em; border-radius: 6px; overflow-x: auto; margin: 1em 0; border: 1px solid #30363d; user-select: text; } .markdown-content pre code { background-color: transparent; color: inherit; padding: 0; } .markdown-content ul, .markdown-content ol { padding-left: 1.8em; margin: 0.8em 0; color: #2d3339; } .markdown-content li { margin: 0.3em 0; } .markdown-content blockquote { border-left: 3px solid #d0d7de; padding-left: 1em; margin: 1em 0; color: #57606a; } .markdown-content table { border-collapse: collapse; margin: 1em 0; width: 100%; } .markdown-content th, .markdown-content td { border: 1px solid #d0d7de; padding: 0.5em 1em; text-align: left; } .markdown-content th { background-color: #f6f8fa; font-weight: 600; } .markdown-content tr:nth-child(even) { background-color: #f6f8fa; }