body { font-family: 'PingFang SC', 'Microsoft YaHei', sans-serif; margin: 0; padding: 0px; background-color: #f7f8fb; } .container { max-width: 80%; margin: 0 auto; border-radius: 10px; padding: 0px; } .section { margin-top: 10px; margin-bottom: 10px; padding: 10px; border-radius: 15px; background-color: #fff; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); } .section h2 { margin: 0; color: #444; font-size: 14px; font-weight: 600; letter-spacing: 0.02em; display: flex; align-items: center; gap: 10px; } .toggle-button, .connect-button { margin-left: auto; padding: 4px 12px; font-size: 14px; border-radius: 20px; cursor: pointer; height: 28px; line-height: 20px; } .toggle-button { border: 1px solid #007aff; background-color: #fff; color: #007aff; } .connect-button { box-shadow: 0px 0px 10px 2px rgba(0, 122, 255, 0.28); } .config-panel { display: block; transition: all 0.3s ease; } /* 只为MCP工具面板设置默认隐藏 */ #mcpToolsPanel { display: none; } #mcpToolsPanel.expanded { display: block; } .control-panel { display: flex; flex-direction: column; gap: 10px; margin-top: 10px; } .config-row { display: flex; gap: 10px; width: 100%; } .config-item { flex: 1; display: flex; align-items: center; gap: 10px; min-width: 0; } .config-item input { flex: 1; width: 0; /* 确保input能自动填充剩余空间 */ } button { padding: 8px 15px; border: none; border-radius: 5px; background-color: #007aff; color: white; cursor: pointer; transition: background-color 0.2s; } button:disabled { background-color: #cccccc; cursor: not-allowed; } #serverUrl, #otaUrl { flex-grow: 1; padding: 8px; border: 1px solid #ddd; border-radius: 5px; } .message-input { display: flex; gap: 10px; margin-bottom: 20px; } #messageInput { flex-grow: 1; padding: 8px; border: 1px solid #ddd; border-radius: 10px; } #sendTextButton, #recordButton { border-radius: 20px; } .conversation { max-height: 300px; overflow-y: auto; border: 1px solid #ddd; border-right: none; border-radius: 5px 0px 0px 5px; padding: 10px; flex: 1; } .message { margin-bottom: 10px; padding: 8px 12px; border-radius: 8px; width: fit-content; max-width: 80%; } .user { background-color: #95ec69; margin-left: auto; margin-right: 10px; text-align: right; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); } .server { background-color: #fff; margin-right: auto; margin-left: 10px; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); } .audio-controls { display: flex; justify-content: center; gap: 10px; margin-top: 20px; } .audio-visualizer { height: 60px; width: 100%; margin-top: 10px; border: 1px solid #ddd; border-radius: 5px; background-color: #fafafa; } .record-button { background-color: #db4437; } .record-button:hover { background-color: #c53929; } .record-button.recording { animation: pulse 1.5s infinite; } @keyframes pulse { 0% { background-color: #db4437; } 50% { background-color: #ff6659; } 100% { background-color: #db4437; } } #logContainer { margin-top: 0; padding: 10px; border-radius: 0px 5px 5px 0px; font-family: monospace; height: 300px; overflow-y: auto; flex: 1; border: 1px solid #ddd; } .log-entry { margin: 5px 0; font-size: 12px; } .log-info { color: #333; } .log-error { color: #db4437; } .log-success { color: #0f9d58; } .script-status { display: inline-block; width: 10px; height: 10px; border-radius: 50%; margin-right: 5px; } .script-loaded { background-color: #0f9d58; } .script-loading { background-color: #f4b400; } .script-error { background-color: #db4437; } .script-list { margin: 10px 0; padding: 10px; background-color: #f9f9f9; border-radius: 5px; font-family: monospace; font-size: 11px; } #scriptStatus.success { background-color: #e6f4ea; color: #0f9d58; border-left: 4px solid #0f9d58; } #scriptStatus.error { background-color: #fce8e6; color: #db4437; border-left: 4px solid #db4437; } #scriptStatus.warning { background-color: #fef7e0; color: #f4b400; border-left: 4px solid #f4b400; } /* 标签页样式 */ .tabs { display: flex; margin-bottom: 20px; border-bottom: 2px solid #e0e0e0; } .tab { padding: 10px 20px; cursor: pointer; border: none; background: none; font-size: 16px; color: #666; position: relative; transition: all 0.3s ease; } .tab:hover { color: #007aff; } .tab.active { color: #007aff; font-weight: bold; } .tab.active::after { content: ''; position: absolute; bottom: -2px; left: 0; width: 100%; height: 2px; background-color: #007aff; } .tab-content { display: none; } .tab-content.active { display: block; } .flex-container { display: flex; margin-top: 10px; background-color: #f9fafb; } .config-item { display: flex; align-items: center; margin-bottom: 8px; width: 100%; } .config-item label { white-space: nowrap; min-width: 70px; text-align: left; color: #666; font-size: 14px; } .config-item input { flex-grow: 1; padding: 6px; border: 1px solid #ddd; border-radius: 5px; } .config-item input:disabled { background-color: #f9f9f9; border-color: #e0e0e0; cursor: default; } /* 两栏布局样式 */ .two-column-layout { display: flex; gap: 15px; align-items: stretch; } .two-column-layout>.section { flex: 1; margin-bottom: 5px; } .control-panel { display: flex; flex-direction: column; gap: 10px; margin-top: 10px; } .connection-controls { display: flex; flex-direction: column; gap: 10px; width: 100%; margin-top: 10px; } .connection-controls input { width: 100%; padding: 8px; border: 1px solid #ddd; border-radius: 5px; box-sizing: border-box; } .connection-controls button { white-space: nowrap; padding: 8px 15px; } .connection-status { display: flex; align-items: center; gap: 20px; margin-left: 20px; padding: 0 15px; height: 28px; line-height: 28px; } .connection-status span { font-size: 13px; } .connection-status .status { /* 默认未连接状态 */ background-color: #fef2f2; color: #b91c1c; font-size: 12px; padding: 0px 8px; border-radius: 20px; transition: all 0.3s ease; } /* 已连接状态样式 */ .connection-status .status.connected { background-color: #ecfdf3; color: #15803d; } #fileProtocolWarning { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.8); display: flex; flex-direction: column; align-items: center; justify-content: center; z-index: 9999; color: white; padding: 20px; box-sizing: border-box; } #fileProtocolWarning h2 { color: #ff4d4d; margin-bottom: 20px; } #fileProtocolWarning pre { background-color: green; font-size: 18px; padding: 15px; border-radius: 5px; font-family: monospace; overflow-x: auto; margin: 15px 0; } #fileProtocolWarning button { background-color: #4CAF50; color: white; border: none; padding: 10px 20px; text-align: center; text-decoration: none; display: inline-block; font-size: 16px; margin: 10px 2px; cursor: pointer; border-radius: 4px; } #fileProtocolWarning button:hover { background-color: #45a049; } /* MCP 工具管理样式 */ .mcp-tools-container { display: grid; gap: 12px; margin-top: 10px; } .mcp-tool-card { background-color: white; border: 1px solid #e0e0e0; border-radius: 8px; padding: 15px; transition: all 0.2s; } .mcp-tool-card:hover { box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); } .mcp-tool-card.disabled { opacity: 0.6; pointer-events: none; } .mcp-tool-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; } .mcp-tool-name { font-size: 15px; font-weight: 600; color: #333; flex: 1; } .mcp-tool-actions { display: flex; gap: 6px; } .mcp-tool-description { color: #666; font-size: 13px; line-height: 1.5; margin-bottom: 8px; } .mcp-tool-info { background-color: #f9f9f9; border: 1px solid #e0e0e0; border-radius: 4px; padding: 8px; font-size: 12px; } .mcp-tool-info-row { display: flex; gap: 15px; margin-bottom: 4px; } .mcp-tool-info-label { color: #999; min-width: 60px; } .mcp-tool-info-value { color: #333; font-family: 'Courier New', monospace; } .mcp-property-item { background-color: white; border: 1px solid #e0e0e0; border-radius: 5px; padding: 12px; margin-bottom: 10px; } .mcp-property-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; } .mcp-property-name { font-weight: 600; color: #333; } .mcp-property-row { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 8px; } .mcp-property-row-full { margin-bottom: 8px; } .mcp-small-label { display: block; margin-bottom: 4px; font-size: 12px; color: #666; } .mcp-small-input { width: 100%; padding: 6px 8px; border: 1px solid #ddd; border-radius: 4px; font-size: 13px; } .mcp-checkbox-label { display: flex; align-items: center; gap: 6px; font-size: 13px; color: #666; cursor: pointer; } .mcp-error { background-color: #ffebee; color: #c62828; padding: 10px; border-radius: 5px; margin-bottom: 15px; font-size: 14px; } .mcp-badge { display: inline-block; padding: 2px 8px; border-radius: 12px; font-size: 11px; font-weight: 500; margin-left: 8px; } .mcp-badge-required { background-color: #ffebee; color: #c62828; } .mcp-badge-optional { background-color: #e3f2fd; color: #1976d2; }