/* static/style-enhanced.css - 增强版,包含对话历史管理功能 */ * { margin: 0; padding: 0; box-sizing: border-box; } :root { --app-viewport: 100vh; --app-bottom-inset: env(safe-area-inset-bottom, 0px); --claude-bg: #eeece2; --claude-panel: rgba(255, 255, 255, 0.82); --claude-left-rail: #f7f3ea; --claude-sidebar: rgba(255, 255, 255, 0.68); --claude-border: rgba(118, 103, 84, 0.25); --claude-text: #3d3929; --claude-text-secondary: #7f7766; --claude-muted: rgba(121, 109, 94, 0.4); --claude-accent: #da7756; --claude-accent-strong: #bd5d3a; --claude-highlight: rgba(218, 119, 86, 0.14); --claude-button-hover: #c76541; --claude-button-active: #a95331; --claude-shadow: 0 14px 36px rgba(61, 57, 41, 0.12); --claude-success: #76b086; --claude-warning: #d99845; } /* 全局图标工具类 */ .icon { --icon-size: 1em; width: var(--icon-size); height: var(--icon-size); display: inline-block; vertical-align: middle; background-color: currentColor; mask-image: var(--icon-src); mask-repeat: no-repeat; mask-position: center; mask-size: contain; -webkit-mask-image: var(--icon-src); -webkit-mask-repeat: no-repeat; -webkit-mask-position: center; -webkit-mask-size: contain; } .icon-sm { --icon-size: 16px; } .icon-md { --icon-size: 20px; } .icon-lg { --icon-size: 24px; } .icon-xl { --icon-size: 32px; } .icon-label { display: inline-flex; align-items: center; gap: 6px; } html, body { height: var(--app-viewport, 100vh); } body { font-family: 'Iowan Old Style', ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; background: var(--claude-bg); color: var(--claude-text); overflow: hidden; -webkit-font-smoothing: antialiased; } /* 顶部状态栏 */ .header { background: var(--claude-panel); backdrop-filter: blur(24px); border-bottom: 1px solid var(--claude-border); padding: 12px 20px; display: flex; justify-content: space-between; align-items: center; height: 56px; z-index: 100; box-shadow: 0 10px 24px rgba(61, 57, 41, 0.05); } .header-left { display: flex; align-items: center; gap: 20px; } .logo { font-size: 18px; font-weight: 600; color: var(--claude-text); letter-spacing: 0.02em; } .agent-version { color: var(--claude-text-secondary); font-size: 16px; } .header-right { display: flex; align-items: center; gap: 20px; } .thinking-mode { background: var(--claude-accent); color: #fff8f2; padding: 5px 14px; border-radius: 980px; font-size: 13px; font-weight: 500; letter-spacing: 0.04em; } .connection-status { font-size: 13px; color: var(--claude-text-secondary); display: flex; align-items: center; gap: 6px; } /* 主容器 */ .main-container { display: flex; height: var(--app-viewport, 100vh); background: var(--claude-bg); position: relative; align-items: stretch; } /* ========================================= */ /* 新增:对话历史侧边栏样式 */ /* ========================================= */ .conversation-sidebar { width: 280px; background-color: var(--claude-left-rail); border-right: none; flex-shrink: 0; display: flex; flex-direction: column; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); z-index: 50; height: var(--app-viewport, 100vh) !important; min-height: var(--app-viewport, 100vh) !important; border-bottom: 1px solid var(--claude-border); } .conversation-sidebar, .conversation-sidebar .conversation-header, .conversation-sidebar .conversation-search, .conversation-sidebar .conversation-list, .conversation-sidebar .conversation-personal-entry, .conversation-sidebar .conversation-collapsed-spacer { background-color: var(--claude-left-rail); } .conversation-collapsed-spacer { flex: 1 1 auto; background-color: inherit; } .conversation-sidebar.collapsed { width: 50px; overflow: hidden; height: var(--app-viewport, 100vh) !important; min-height: var(--app-viewport, 100vh) !important; background-color: var(--claude-left-rail); } .conversation-header { padding: 18px 16px; border-bottom: 1px solid rgba(118, 103, 84, 0.12); display: flex; justify-content: space-between; align-items: center; gap: 12px; background-color: inherit; color: var(--claude-text); position: sticky; top: 0; z-index: 60; min-height: 68px; } .conversation-header.collapsed-layout { flex-direction: column; justify-content: flex-start; align-items: center; padding: 16px 6px 12px; gap: 14px; border-bottom: none; } .collapsed-header-buttons { display: flex; flex-direction: column; gap: 12px; width: 100%; align-items: center; } .collapsed-control-btn { width: 56px; height: 56px; border-radius: 28px; border: none; background: transparent; color: var(--claude-text); display: inline-flex; align-items: center; justify-content: center; cursor: pointer; padding: 0; box-shadow: none; transition: transform 0.2s ease, color 0.2s ease; } .collapsed-control-btn:hover { transform: translateY(-1px); color: var(--claude-accent); } .conversation-menu-btn { color: #31271d; } .conversation-menu-btn:hover { color: var(--claude-accent); } .chat-icon { display: inline-flex; align-items: center; justify-content: center; } .conversation-menu-btn svg { width: 30px; height: 30px; } .quick-plus-btn { width: 48px; height: 48px; border-radius: 24px; border: none; background: transparent; color: #2f251b; display: inline-flex; align-items: center; justify-content: center; transition: color 0.25s ease, transform 0.2s ease; } .quick-plus-btn:hover, .quick-plus-btn:focus-visible { color: var(--claude-accent); transform: translateY(-1px); } .pencil-icon svg { width: 22px; height: 22px; } .pencil-icon path { fill: currentColor; fill-opacity: 0.92; } .new-conversation-btn { flex: 1; background: linear-gradient(135deg, var(--claude-accent) 0%, var(--claude-accent-strong) 100%); color: #fff8f2; border: 1px solid rgba(189, 93, 58, 0.4); padding: 8px 12px; border-radius: 6px; font-size: 13px; font-weight: 500; cursor: pointer; transition: all 0.2s ease; display: flex; align-items: center; gap: 6px; box-shadow: 0 6px 14px rgba(189, 93, 58, 0.18); } .new-conversation-btn:hover { background: linear-gradient(135deg, var(--claude-button-hover) 0%, var(--claude-button-active) 100%); transform: translateY(-1px); } .btn-icon { font-size: 16px; font-weight: bold; } .btn-text { white-space: nowrap; } .toggle-sidebar-btn { background: rgba(255, 255, 255, 0.7); color: var(--claude-text); border: 1px solid rgba(118, 103, 84, 0.18); padding: 6px 8px; border-radius: 4px; font-size: 14px; cursor: pointer; transition: all 0.2s ease; min-width: 32px; height: 32px; display: flex; align-items: center; justify-content: center; } .toggle-sidebar-btn:hover { background: rgba(255, 255, 255, 0.9); } .conversation-personal-entry { margin-top: auto; padding: 8px 16px 12px; display: flex; justify-content: center; background-color: inherit; } .conversation-personal-entry.collapsed { padding: 8px 0 10px; } .personal-page-btn { border: none; border-radius: 999px; background: transparent; color: var(--claude-text); display: inline-flex; align-items: center; justify-content: center; gap: 10px; padding: 10px 18px; font-size: 13px; font-weight: 500; cursor: pointer; transition: color 0.2s ease, transform 0.2s ease; } .conversation-personal-entry:not(.collapsed) .personal-page-btn { width: 100%; justify-content: flex-start; padding: 8px 12px; border-radius: 12px; background: rgba(255, 255, 255, 0.4); } .personal-page-btn svg { width: 20px; height: 20px; } .personal-page-btn:hover, .personal-page-btn:focus-visible { color: var(--claude-accent); transform: translateY(-1px); } .personal-page-btn:focus-visible { outline: none; box-shadow: 0 0 0 2px rgba(218, 119, 86, 0.15); } .personal-page-btn.icon-only { width: 54px; height: 54px; padding: 0; border-radius: 27px; color: var(--claude-text); } .personal-page-btn.icon-only svg { width: 26px; height: 26px; } .personal-page-btn.icon-only:hover, .personal-page-btn.icon-only:focus-visible { color: var(--claude-accent); transform: translateY(-1px); } .conversation-personal-entry:not(.collapsed) .personal-page-btn:hover, .conversation-personal-entry:not(.collapsed) .personal-page-btn:focus-visible { background: rgba(218, 119, 86, 0.08); } .personal-label { letter-spacing: 0.02em; } .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); border: 0; } .conversation-search { padding: 12px; background-color: inherit; border-bottom: 1px solid var(--claude-border); } .search-input { width: 100%; padding: 8px 12px; border: 1px solid var(--claude-border); border-radius: 6px; font-size: 13px; background: rgba(255, 255, 255, 0.55); color: var(--claude-text); transition: all 0.2s ease; } .search-input:focus { outline: none; border-color: var(--claude-accent); background: rgba(255, 255, 255, 0.85); box-shadow: 0 0 0 3px rgba(218, 119, 86, 0.18); } .conversation-list { flex: 1; overflow-y: auto; padding: 8px 0; background-color: inherit; } .loading-conversations, o-conversations { text-align: center; color: var(--claude-text-secondary); padding: 30px 15px; font-size: 13px; } .conversation-item { padding: 12px 16px; margin: 2px 8px; border-radius: 12px; cursor: pointer; transition: all 0.2s ease; border: 1px solid transparent; position: relative; background: rgba(255, 255, 255, 0.7); box-shadow: 0 6px 16px rgba(61, 57, 41, 0.04); } .conversation-item:hover { background: rgba(255, 255, 255, 0.85); border-color: rgba(218, 119, 86, 0.35); box-shadow: 0 10px 24px rgba(61, 57, 41, 0.08); } .conversation-item.active { background: rgba(218, 119, 86, 0.18); border-color: var(--claude-accent); box-shadow: 0 10px 28px rgba(189, 93, 58, 0.18); } .conversation-title { font-size: 14px; font-weight: 500; color: var(--claude-text); margin-bottom: 6px; word-wrap: break-word; overflow: hidden; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; line-height: 1.3; } .conversation-meta { font-size: 11px; color: var(--claude-text-secondary); display: flex; justify-content: space-between; align-items: center; margin-bottom: 2px; } .conversation-time { flex-shrink: 0; } .conversation-counts { text-align: right; white-space: nowrap; font-size: 10px; } .conversation-actions { position: absolute; top: 50%; right: 10px; transform: translateY(-50%); opacity: 0; transition: opacity 0.2s ease; display: flex; flex-direction: column; align-items: flex-end; gap: 6px; } .conversation-item:hover .conversation-actions { opacity: 1; } .conversation-action-btn { border: none; border-radius: 4px; font-size: 13px; width: 22px; height: 22px; display: flex; align-items: center; justify-content: center; line-height: 1; cursor: pointer; transition: all 0.2s ease; padding: 0; color: white; } .conversation-action-btn.copy-btn { background: var(--claude-accent); } .conversation-action-btn.copy-btn:hover { background: var(--claude-button-hover); transform: translateY(-1px); } .conversation-action-btn.delete-btn { background: #d85a42; } .conversation-action-btn.delete-btn:hover { background: #bf422b; transform: translateY(-1px); } .load-more { padding: 12px 16px; text-align: center; } .load-more-btn { background: rgba(218, 119, 86, 0.12); color: var(--claude-accent); border: 1px solid rgba(218, 119, 86, 0.35); padding: 6px 14px; border-radius: 6px; font-size: 12px; cursor: pointer; transition: all 0.2s ease; } .load-more-btn:hover:not(:disabled) { background: var(--claude-accent); color: #fffdf8; } .load-more-btn:disabled { opacity: 0.5; cursor: not-allowed; } /* 拖拽手柄 */ .resize-handle { width: 4px; background: var(--claude-left-rail); cursor: col-resize; position: relative; transition: background 0.2s; flex-shrink: 0; } .resize-handle:hover { background: rgba(218, 119, 86, 0.22); } /* 侧边栏 */ .sidebar { background: var(--claude-left-rail); overflow-y: auto; flex-shrink: 0; border-left: none; } .sidebar.left-sidebar { display: flex; flex-direction: column; } .sidebar-status { padding: 18px 18px 8px; } .compact-status-card { background: var(--claude-panel); border: 1px solid var(--claude-border); border-radius: 18px; padding: 14px 16px; box-shadow: 0 12px 30px rgba(61, 57, 41, 0.12); display: flex; align-items: center; } .status-line { display: flex; align-items: center; justify-content: space-between; width: 100%; gap: 18px; } .status-brand { display: flex; align-items: center; gap: 12px; } .status-logo { color: var(--claude-accent); } .brand-text { display: flex; align-items: baseline; gap: 8px; font-weight: 600; color: var(--claude-text); } .brand-name { font-size: 16px; } .status-indicators { display: flex; align-items: center; gap: 10px; } .mode-indicator { width: 36px; height: 36px; border-radius: 18px; display: inline-flex; align-items: center; justify-content: center; background: var(--claude-accent); color: #fffef8; box-shadow: 0 8px 20px rgba(189, 93, 58, 0.25); transition: background 0.25s ease, box-shadow 0.25s ease, transform 0.25s ease; } .mode-indicator.fast { background: #ffcc4d; box-shadow: 0 8px 20px rgba(255, 204, 77, 0.35); } .mode-indicator .icon { --icon-size: 18px; color: inherit; } .connection-dot { width: 12px; height: 12px; border-radius: 6px; background: var(--claude-muted); box-shadow: 0 0 0 4px rgba(121, 109, 94, 0.18); transition: background 0.2s ease, box-shadow 0.2s ease; } .connection-dot.active { background: var(--claude-success); box-shadow: 0 0 0 6px rgba(118, 176, 134, 0.25); } .mode-icon-enter-active, .mode-icon-leave-active { transition: opacity 0.2s ease, transform 0.2s ease; } .mode-icon-enter-from, .mode-icon-leave-to { opacity: 0; transform: scale(0.5) rotate(8deg); } .sidebar-header { padding: 23px; border-bottom: 1px solid var(--claude-border); position: sticky; top: 0; background: rgba(255, 255, 255, 0.85); z-index: 10; backdrop-filter: blur(16px); display: flex; align-items: center; gap: 10px; } .sidebar-header h3 { font-size: 15px; font-weight: 600; color: var(--claude-text); margin: 0; } .sidebar-manage-btn { border: 1px solid rgba(118, 103, 84, 0.25); background: rgba(255, 255, 255, 0.75); color: var(--claude-text); padding: 4px 10px; border-radius: 6px; font-size: 13px; cursor: pointer; transition: background 0.2s, border-color 0.2s; } .sidebar-manage-btn:hover { background: rgba(255, 255, 255, 0.95); border-color: rgba(118, 103, 84, 0.45); } .sidebar-view-toggle { width: 32px; height: 32px; border-radius: 8px; border: 1px solid rgba(118, 103, 84, 0.3); background: rgba(255, 255, 255, 0.85); cursor: pointer; display: flex; align-items: center; justify-content: center; font-size: 18px; transition: all 0.2s ease; color: var(--claude-text); } .sidebar-view-toggle:hover { background: rgba(255, 255, 255, 0.95); } .sidebar-panel-card-wrapper { padding: 0 18px 24px; flex: 1 1 auto; display: flex; min-height: 0; } .sidebar-panel-card { background: var(--claude-panel); border: 1px solid var(--claude-border); border-radius: 18px; box-shadow: 0 12px 30px rgba(61, 57, 41, 0.12); width: 100%; display: flex; flex-direction: column; overflow: hidden; min-height: 0; } .sidebar-panel-card .sidebar-header { border-radius: 18px 18px 0 0; } .sidebar-panel-content { flex: 1 1 auto; background: var(--claude-sidebar); padding: 6px 12px 24px; border-radius: 0 0 18px 18px; border-top: 1px solid rgba(118, 103, 84, 0.12); } .panel-menu-wrapper { position: relative; display: inline-flex; align-items: center; } .panel-menu { position: absolute; left: calc(100% + 8px); top: 0; display: flex; gap: 6px; background: rgba(255, 255, 255, 0.95); border: 1px solid rgba(118, 103, 84, 0.2); border-radius: 8px; padding: 6px 8px; box-shadow: 0 6px 18px rgba(61, 57, 41, 0.12); z-index: 20; } .panel-menu button { border: none; background: transparent; font-size: 18px; cursor: pointer; padding: 4px 6px; border-radius: 6px; } .panel-menu button.active { background: rgba(108, 92, 231, 0.1); } .fade-enter-active, .fade-leave-active { transition: opacity 0.15s ease; } .fade-enter-from, .fade-leave-to { opacity: 0; } .sidebar.right-sidebar.collapsed { width: 0 !important; min-width: 0 !important; border-left: none; overflow: hidden; } .sidebar.right-sidebar.collapsed .sidebar-header, .sidebar.right-sidebar.collapsed .focused-files { display: none; } /* 文件树 */ .file-tree { padding: 12px 0 20px; color: var(--claude-text); } .todo-panel { padding: 16px 20px 24px; display: flex; flex-direction: column; gap: 12px; } .sub-agent-panel { padding: 16px 16px 24px; } .sub-agent-cards { display: flex; flex-direction: column; gap: 10px; } .sub-agent-card { border: 1px solid rgba(118, 103, 84, 0.2); border-radius: 10px; padding: 12px 14px; background: rgba(255, 255, 255, 0.92); cursor: pointer; transition: border-color 0.2s ease, box-shadow 0.2s ease; } .sub-agent-card:hover { border-color: #6c5ce7; box-shadow: 0 6px 16px rgba(108, 92, 231, 0.15); } .sub-agent-header { display: flex; justify-content: space-between; align-items: center; font-weight: 600; margin-bottom: 6px; } .sub-agent-status { text-transform: capitalize; font-size: 12px; } .sub-agent-status.running { color: #0984e3; } .sub-agent-status.completed { color: #00b894; } .sub-agent-status.failed, .sub-agent-status.timeout { color: #d63031; } .sub-agent-summary { font-size: 13px; color: var(--claude-text); margin-bottom: 4px; } .sub-agent-tool { font-size: 12px; color: var(--claude-text-secondary); } .todo-empty { font-size: 14px; color: var(--claude-text-secondary); padding: 12px; border-radius: 10px; background: rgba(255, 255, 255, 0.8); border: 1px dashed var(--claude-border); text-align: center; } .todo-task { display: flex; align-items: center; justify-content: space-between; padding: 10px 14px; border: 1px solid rgba(118, 103, 84, 0.18); border-radius: 10px; font-size: 13px; color: var(--claude-text); background: rgba(255, 255, 255, 0.9); } .todo-task.done { background: rgba(92, 190, 125, 0.08); border-color: rgba(92, 190, 125, 0.3); } .todo-task-title { flex: 1; } .todo-task-status { font-weight: 600; font-size: 12px; margin-left: 12px; } .todo-instruction { font-size: 12px; color: var(--claude-text-secondary); margin-top: 8px; } .file-node-wrapper { font-size: 14px; color: var(--claude-text); font-family: inherit; } .folder-header { width: 100%; display: flex; align-items: center; gap: 8px; padding: 6px 12px; border: none; background: transparent; color: inherit; cursor: pointer; border-radius: 8px; transition: background 0.2s ease, transform 0.2s ease; text-align: left; font-family: inherit; } .folder-header:hover { background: rgba(218, 119, 86, 0.12); transform: translateX(2px); } .folder-arrow { width: 12px; text-align: center; color: var(--claude-text-secondary); font-size: 12px; } .folder-icon, .file-icon { width: 18px; text-align: center; } .folder-name, .file-name { flex: 1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-family: inherit; } .folder-children { margin-left: 14px; padding-left: 6px; border-left: 1px dashed rgba(0, 0, 0, 0.08); } .folder-children .file-node-wrapper { margin-left: 0; } .file-node.file-leaf { display: flex; align-items: center; gap: 8px; padding: 6px 12px; border-radius: 8px; font-family: inherit; } .file-node.file-leaf:hover { background: rgba(218, 119, 86, 0.1); } .file-node .annotation { color: var(--claude-text-secondary); font-size: 12px; margin-left: 8px; } .context-menu { position: fixed; background: #ffffff; border: 1px solid rgba(15, 23, 42, 0.08); border-radius: 8px; box-shadow: 0 12px 28px rgba(15, 23, 42, 0.15); z-index: 3000; min-width: 180px; padding: 6px 0; backdrop-filter: blur(8px); } .context-menu button { width: 100%; padding: 8px 18px; background: transparent; border: none; text-align: left; font-size: 13px; color: #1f2933; cursor: pointer; transition: background 0.15s ease; } .context-menu button:hover { background: rgba(59, 130, 246, 0.12); } .context-menu button:disabled { color: #9ca3af; cursor: not-allowed; background: transparent; } /* 聊天容器 */ .chat-container { flex: 1; display: flex; flex-direction: column; background: rgba(255, 255, 255, 0.78); min-width: 0; min-height: 0; position: relative; backdrop-filter: blur(6px); } .chat-container button { outline: none; } .chat-container button:focus, .chat-container button:focus-visible { outline: none; box-shadow: none; } /* 消息区域 */ .messages-area { flex: 1; overflow-y: auto; padding: 24px; padding-top: 30px; padding-bottom: calc(80px + var(--app-bottom-inset, 0px)); min-height: 0; } .scroll-lock-toggle { position: absolute; right: 28px; bottom: 110px; z-index: 25; display: flex; align-items: center; justify-content: flex-end; } .scroll-lock-btn { width: 36px; height: 36px; border-radius: 50%; border: 1px solid var(--claude-border); background: rgba(255, 255, 255, 0.92); display: flex; align-items: center; justify-content: center; cursor: pointer; transition: all 0.2s ease; box-shadow: 0 6px 16px rgba(61, 57, 41, 0.08); } .scroll-lock-btn:hover { transform: translateY(-2px); box-shadow: 0 9px 20px rgba(61, 57, 41, 0.12); } .scroll-lock-toggle.locked .scroll-lock-btn { border-color: rgba(218, 119, 86, 0.32); box-shadow: 0 0 10px rgba(218, 119, 86, 0.28); } .scroll-lock-btn svg { width: 18px; height: 18px; stroke: var(--claude-text); stroke-width: 1.8; fill: none; transition: stroke 0.2s ease; } .scroll-lock-toggle.locked .scroll-lock-btn svg { stroke: var(--claude-accent); } /* 滚动条 */ .messages-area::-webkit-scrollbar, .sidebar::-webkit-scrollbar, .conversation-list::-webkit-scrollbar { width: 8px; } .messages-area::-webkit-scrollbar-track, .sidebar::-webkit-scrollbar-track, .conversation-list::-webkit-scrollbar-track { background: transparent; } .messages-area::-webkit-scrollbar-thumb, .sidebar::-webkit-scrollbar-thumb, .conversation-list::-webkit-scrollbar-thumb { background: rgba(121, 109, 94, 0.4); border-radius: 8px; } /* 消息块 */ .message-block { margin-bottom: 24px; } /* 用户消息 */ .user-message .message-header { font-size: 14px; font-weight: 600; color: var(--claude-text); margin-bottom: 8px; letter-spacing: 0.02em; } .user-message .message-text { background: rgba(255, 255, 255, 0.85); padding: 16px 20px; border-radius: 18px; color: var(--claude-text); font-size: 15px; line-height: 1.6; box-shadow: 0 12px 28px rgba(61, 57, 41, 0.08); white-space: pre-wrap; } /* AI消息 */ .assistant-message .message-header { font-size: 14px; font-weight: 600; color: var(--claude-text); margin-bottom: 12px; letter-spacing: 0.02em; } .assistant-message .message-text { background: rgba(218, 119, 86, 0.12); padding: 16px 20px; border-radius: 18px; color: var(--claude-text); font-size: 15px; line-height: 1.6; box-shadow: 0 12px 28px rgba(61, 57, 41, 0.08); border-left: 4px solid var(--claude-accent); white-space: pre-wrap; } /* Action项入场动画 */ @keyframes slideInFade { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } @keyframes quickFadeIn { from { opacity: 0; transform: translateY(5px); } to { opacity: 1; transform: translateY(0); } } .action-item { animation: slideInFade 0.6s cubic-bezier(0.4, 0, 0.2, 1) both; animation-delay: 0ms; } /* 流式内容:立即显示 */ .action-item.streaming-content, .action-item.immediate-show { animation: quickFadeIn 0.2s ease-out both; animation-delay: 0ms !important; } /* 已完成的工具:统一延迟看动画 */ .action-item.completed-tool { animation: slideInFade 0.4s cubic-bezier(0.4, 0, 0.2, 1) both; animation-delay: 100ms; } /* 文本输出 - 无缩进,与思考块对齐 */ .text-output { margin: 16px 0; color: var(--claude-text); font-size: 15px; line-height: 1.7; } .text-output .text-content { padding: 0 20px 0 15px; /* 左边56px与思考块对齐 */ } .text-output .text-content p { margin-bottom: 12px; } .text-output .text-content p:last-child { margin-bottom: 0; } .system-action { margin: 12px 0; padding: 10px 14px; border-radius: 8px; background: linear-gradient(135deg, rgba(99, 102, 241, 0.08), rgba(59, 130, 246, 0.08)); border-left: 4px solid rgba(79, 70, 229, 0.6); color: var(--claude-text); font-size: 14px; line-height: 1.5; } .system-action-content { display: flex; align-items: flex-start; gap: 8px; } .append-block { margin: 12px 0; padding: 12px 16px; border-radius: 10px; background: rgba(255, 255, 255, 0.82); border-left: 4px solid rgba(218, 119, 86, 0.32); box-shadow: inset 0 0 0 1px rgba(218, 119, 86, 0.05); display: flex; flex-direction: column; gap: 8px; } .append-block.append-error { background: rgba(255, 244, 242, 0.85); border-left-color: rgba(216, 90, 66, 0.38); box-shadow: inset 0 0 0 1px rgba(216, 90, 66, 0.08); } .append-header { display: flex; align-items: center; gap: 10px; font-weight: 600; color: var(--claude-text); font-size: 15px; } .append-block.append-error .append-header { color: #b0432a; } .append-icon { font-size: 18px; } .append-summary { flex: 1; } .append-meta { display: flex; flex-wrap: wrap; gap: 12px; color: var(--claude-text-secondary); font-size: 13px; } .append-meta-item { display: inline-flex; align-items: center; gap: 4px; } .append-status { font-weight: 500; color: var(--claude-text); } .append-error-text { color: #b0432a; } .append-warning { color: var(--claude-warning); font-weight: 500; } .modify-placeholder { margin: 12px 0; } .modify-placeholder-content { background: rgba(255, 255, 255, 0.82); border-left: 4px solid rgba(218, 119, 86, 0.32); border-radius: 10px; padding: 12px 16px; display: flex; flex-direction: column; gap: 6px; color: var(--claude-text); font-size: 14px; line-height: 1.6; } .modify-placeholder-content .modify-warning { color: var(--claude-warning); font-weight: 500; } .modify-placeholder-content .modify-meta { display: flex; flex-wrap: wrap; gap: 12px; color: var(--claude-text-secondary); font-size: 13px; } .append-placeholder { margin: 12px 0; } .append-placeholder-content { background: rgba(255, 255, 255, 0.82); border-left: 4px solid rgba(218, 119, 86, 0.32); border-radius: 10px; padding: 12px 16px; display: flex; flex-direction: column; gap: 6px; color: var(--claude-text); font-size: 14px; line-height: 1.6; } .append-placeholder-content .append-warning { margin-top: 4px; } .append-placeholder.append-error .append-placeholder-content { background: rgba(255, 244, 242, 0.85); border-left-color: rgba(216, 90, 66, 0.38); } /* Markdown表格样式 */ .text-content table { border-collapse: collapse; width: 100%; margin: 16px 0; border: 1px solid #e0e0e0; border-radius: 8px; overflow: hidden; } .text-content table th, .text-content table td { border: 1px solid #e0e0e0; padding: 10px 14px; text-align: left; } .text-content table th { background: rgba(218, 119, 86, 0.08); font-weight: 600; color: var(--claude-text); } .text-content table tr:hover { background: #fafafa; } /* 代码块包装器 - 防止跳动 */ .code-block-wrapper { border: 2px solid rgba(118, 103, 84, 0.25); border-radius: 12px; overflow: hidden; margin: 16px 0; background: rgba(255, 255, 255, 0.78); min-height: 80px; /* 添加最小高度防止跳动 */ contain: layout; /* CSS containment 优化渲染 */ } /* 代码块头部 */ .code-block-header { background: rgba(218, 119, 86, 0.08); padding: 10px 16px; display: flex; justify-content: space-between; align-items: center; border-bottom: 1px solid rgba(118, 103, 84, 0.25); } .code-language { color: var(--claude-text-secondary); font-size: 13px; font-family: 'SF Mono', 'Monaco', 'Consolas', monospace; font-weight: 500; } .copy-code-btn { background: transparent; color: var(--claude-text-secondary); border: 1px solid rgba(121, 109, 94, 0.35); padding: 0; border-radius: 6px; width: 36px; height: 32px; cursor: pointer; transition: all 0.2s ease; display: inline-flex; align-items: center; justify-content: center; } .copy-code-btn::before { content: ''; width: 18px; height: 18px; background-color: currentColor; mask-image: url('/static/icons/clipboard.svg'); mask-repeat: no-repeat; mask-position: center; mask-size: contain; -webkit-mask-image: url('/static/icons/clipboard.svg'); -webkit-mask-repeat: no-repeat; -webkit-mask-position: center; -webkit-mask-size: contain; } .copy-code-btn:hover { background: rgba(218, 119, 86, 0.12); color: var(--claude-accent-strong); } .copy-code-btn.copied { background: var(--claude-success); border-color: var(--claude-success); color: #f6fff8; } .copy-code-btn.copied::before { mask-image: url('/static/icons/check.svg'); -webkit-mask-image: url('/static/icons/check.svg'); } /* 代码块内容区 */ .code-block-wrapper pre { background: #ffffff !important; padding: 16px !important; margin: 0 !important; border-radius: 0 !important; border: none !important; } .code-block-wrapper pre code { background: transparent !important; padding: 0 !important; color: #000000; } /* 流式文本 */ .streaming-text { display: block; } .cursor-blink { animation: blink 1s steps(1) infinite; color: var(--claude-accent); font-weight: normal; } /* 思考内容样式 - 保留换行 */ .thinking-content { white-space: pre-wrap; /* 保留换行和空格 */ word-wrap: break-word; font-family: 'SF Mono', 'Monaco', 'Consolas', monospace; font-size: 13px; line-height: 1.6; color: var(--claude-text-secondary); } /* 可折叠块 */ .collapsible-block { background: rgba(255, 255, 255, 0.78); border-radius: 12px; margin-bottom: 12px; overflow: hidden; border: 1px solid var(--claude-border); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); box-shadow: 0 12px 28px rgba(61, 57, 41, 0.08); } .collapsible-block:hover { box-shadow: 0 14px 28px rgba(61, 57, 41, 0.1); } .collapsible-header { padding: 14px 20px; cursor: pointer; display: flex; align-items: center; gap: 12px; user-select: none; background: rgba(255, 255, 255, 0.72); transition: background-color 0.2s ease; position: relative; } .collapsible-header:hover { background: rgba(218, 119, 86, 0.07); } /* 箭头 */ .arrow { width: 20px; height: 20px; display: flex; align-items: center; justify-content: center; transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1); color: var(--claude-text-secondary); } .arrow::before { content: '›'; font-size: 18px; } .collapsible-block.expanded .arrow { transform: rotate(90deg); } /* 状态图标 */ .status-icon { width: 24px; height: 24px; display: flex; align-items: center; justify-content: center; font-size: 18px; color: var(--claude-text); } /* 内容区域 */ .collapsible-content { max-height: 0; overflow: hidden; opacity: 0; transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); } .collapsible-block.expanded .collapsible-content { max-height: 600px; overflow-y: auto; opacity: 1; } .content-inner { padding: 20px 20px 20px 56px; color: var(--claude-text-secondary); font-size: 14px; line-height: 1.6; } /* 工具动画 */ @keyframes brain-pulse { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.15); } } .thinking-icon { animation: brain-pulse 1.5s ease-in-out infinite; } @keyframes file-bounce { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-3px); } } .file-animation { animation: file-bounce 1.5s ease-in-out infinite; } @keyframes scan-effect { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } .read-animation { animation: scan-effect 1.5s ease-in-out infinite; } @keyframes search-rotate { 0% { transform: rotate(-10deg); } 50% { transform: rotate(10deg); } 100% { transform: rotate(-10deg); } } .search-animation { animation: search-rotate 1s ease-in-out infinite; } @keyframes code-breathe { 0%, 100% { opacity: 0.4; } 50% { opacity: 1; } } .code-animation { animation: code-breathe 2s ease-in-out infinite; } .terminal-animation::after { content: '_'; animation: blink 1s steps(1) infinite; margin-left: 2px; } @keyframes memory-fade { 0%, 100% { opacity: 1; transform: scale(1); } 50% { opacity: 0.3; transform: scale(0.95); } } .memory-animation { animation: memory-fade 2s ease-in-out infinite; } @keyframes focus-glow { 0%, 100% { filter: brightness(1); } 50% { filter: brightness(1.3); } } .focus-animation { animation: focus-glow 1.5s ease-in-out infinite; } /* 进度条 */ .progress-indicator { position: absolute; bottom: 0; left: 0; height: 2px; background: var(--claude-accent); animation: progress 2s ease-in-out infinite; opacity: 0; transition: opacity 0.3s ease; } .collapsible-block.processing .progress-indicator { opacity: 1; } @keyframes progress { 0% { width: 0%; left: 0%; } 50% { width: 40%; left: 30%; } 100% { width: 0%; left: 100%; } } /* 状态文字 */ .status-text { font-size: 14px; color: var(--claude-text); font-weight: 500; } .processing .status-text { color: var(--claude-text-secondary); } /* 完成勾号 */ .checkmark { color: var(--claude-success); font-weight: 600; font-size: 16px; } /* 工具描述 */ .tool-desc { color: var(--claude-text-secondary); font-size: 12px; margin-left: 8px; } /* 输入区域 */ .input-area { position: absolute; left: 0; right: 0; bottom: 32px; background: transparent; padding: 0 24px; flex-shrink: 0; pointer-events: none; z-index: 30; } .compact-input-area { display: flex; justify-content: center; pointer-events: none; } .stadium-input-wrapper { position: relative; width: min(900px, 94%); pointer-events: auto; } .stadium-shell { --stadium-radius: 24px; position: relative; width: 100%; min-height: calc(var(--stadium-radius) * 2.1); padding: 12px 18px; border-radius: var(--stadium-radius); border: 1px solid rgba(15, 23, 42, 0.12); background: #ffffff; box-shadow: 0 18px 46px rgba(15, 23, 42, 0.16); display: flex; align-items: center; gap: 12px; transition: padding 0.2s ease, min-height 0.2s ease, box-shadow 0.45s cubic-bezier(0.4, 0, 0.2, 1), border-color 0.45s cubic-bezier(0.4, 0, 0.2, 1); } .stadium-shell.is-multiline { padding-top: 16px; padding-bottom: 16px; min-height: calc(var(--stadium-radius) * 2.7); border-color: rgba(15, 23, 42, 0.2); box-shadow: 0 26px 70px rgba(15, 23, 42, 0.22); } .stadium-shell.is-focused, .stadium-shell.has-text { border-color: rgba(218, 119, 86, 0.32); box-shadow: 0 2px 22px rgba(218, 119, 86, 0.18), 0 0 30px rgba(218, 119, 86, 0.16), 0 22px 60px rgba(15, 23, 42, 0.22); } .stadium-shell.is-multiline.is-focused, .stadium-shell.is-multiline.has-text { box-shadow: 0 2px 28px rgba(218, 119, 86, 0.2), 0 0 36px rgba(218, 119, 86, 0.2), 0 32px 86px rgba(15, 23, 42, 0.28); } .stadium-input { flex: 1 1 auto; width: 100%; border: none; resize: none; background: transparent; font-size: 14px; line-height: 1.4; font-family: inherit; color: var(--claude-text); padding: 0; min-height: 20px; outline: none; overflow-y: auto; scrollbar-width: none; transition: height 0.28s cubic-bezier(0.4, 0, 0.2, 1); will-change: height; } .stadium-input:disabled { opacity: 0.5; cursor: not-allowed; } .stadium-input::-webkit-scrollbar { width: 0; height: 0; } .stadium-btn { flex: 0 0 36px; width: 36px; height: 36px; border: none; border-radius: 50%; background: transparent; color: var(--claude-text); font-size: 18px; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: background 0.2s ease, transform 0.2s ease, margin-top 0.2s ease; } .stadium-btn:disabled { opacity: 0.4; cursor: not-allowed; } .stadium-btn:hover:not(:disabled) { background: rgba(0, 0, 0, 0.05); } .add-btn { font-size: 22px; } .stadium-btn.send-btn { background: var(--claude-accent); color: #fffaf0; box-shadow: 0 10px 20px rgba(189, 93, 58, 0.28); } .stadium-btn.send-btn:hover:not(:disabled) { transform: translateY(-1px); background: var(--claude-button-hover); } .stadium-btn.send-btn:disabled { opacity: 0.4; box-shadow: none; } .stadium-btn.send-btn span { position: relative; top: 0px; } .stadium-btn.send-btn .send-icon { width: 0; height: 0; border-top: 6px solid transparent; border-bottom: 6px solid transparent; border-left: 10px solid #fffaf0; margin-left: 5px; } .stadium-btn.send-btn .stop-icon { width: 12px; height: 12px; border-radius: 2px; background-color: #fffaf0; display: block; } .stadium-btn.send-btn:disabled .send-icon { border-left-color: rgba(255, 255, 255, 0.4); } .stadium-btn.send-btn:disabled .stop-icon { background-color: rgba(255, 255, 255, 0.4); } .stadium-shell.is-multiline .stadium-btn { align-self: flex-end; margin-top: 0; } .file-input-hidden { display: none; } .quick-menu { position: absolute; left: 0; bottom: calc(100% + 14px); display: flex; flex-direction: column; gap: 6px; width: 230px; padding: 12px; background: rgba(255, 255, 255, 0.98); border: 1px solid var(--claude-border); border-radius: 18px; box-shadow: var(--claude-shadow); z-index: 30; pointer-events: auto; } .menu-entry { border: none; background: transparent; padding: 10px 12px; border-radius: 12px; font-size: 14px; text-align: left; color: var(--claude-text); display: flex; align-items: center; justify-content: space-between; cursor: pointer; transition: background 0.15s ease; min-height: 44px; } .menu-entry:hover:not(:disabled) { background: rgba(0, 0, 0, 0.05); } .menu-entry:disabled { opacity: 0.45; cursor: not-allowed; } .menu-entry.has-submenu .entry-arrow { margin-left: 10px; color: var(--claude-text-secondary); } .quick-submenu { position: absolute; top: 0; left: calc(100% + 12px); width: 230px; min-width: 0; padding: 12px; border-radius: 18px; border: 1px solid var(--claude-border); background: rgba(255, 255, 255, 0.98); box-shadow: var(--claude-shadow); z-index: 31; } .submenu-status, .submenu-empty { font-size: 13px; color: var(--claude-text-secondary); } .submenu-list { display: flex; flex-direction: column; gap: 6px; } .quick-submenu.tool-submenu { top: auto; bottom: 0; } .menu-entry.submenu-entry { width: 100%; justify-content: space-between; } .menu-entry.submenu-entry .entry-arrow { color: var(--claude-text-secondary); } .menu-entry.disabled { opacity: 0.5; } .submenu-label { display: inline-flex; align-items: center; gap: 8px; } .quick-menu-enter-active, .quick-menu-leave-active { transition: opacity 0.2s ease, transform 0.2s ease; } .quick-menu-enter-from, .quick-menu-leave-to { opacity: 0; transform: translateY(8px); } .submenu-slide-enter-active, .submenu-slide-leave-active { transition: opacity 0.2s ease, transform 0.2s ease; } .submenu-slide-enter-from, .submenu-slide-leave-to { opacity: 0; transform: translateX(10px); } /* 适应折叠屏/矮屏幕,保证输入区完整可见 */ @media (max-height: 900px) { .input-area { bottom: 12px; padding: 0 12px; } .stadium-shell { width: min(900px, 98%); } } .settings-menu { position: absolute; right: 0; bottom: calc(100% + 12px); background: rgba(255, 255, 255, 0.96); border: 1px solid var(--claude-border); border-radius: 12px; box-shadow: var(--claude-shadow); padding: 12px; display: flex; flex-direction: column; gap: 8px; min-width: 150px; z-index: 40; } .settings-menu::before { content: ''; position: absolute; bottom: -10px; right: 20px; border-width: 10px 10px 0 10px; border-style: solid; border-color: rgba(255, 255, 255, 0.96) transparent transparent transparent; filter: drop-shadow(0 3px 4px rgba(61, 57, 41, 0.12)); } .settings-menu.tool-menu { right: auto; left: 0; min-width: 520px; max-width: 580px; padding: 16px 20px; } .settings-menu.tool-menu::before { left: 32px; right: auto; } .tool-menu .tool-menu-status, .tool-menu .tool-menu-empty { font-size: 13px; color: rgba(61, 57, 41, 0.78); text-align: left; } .tool-menu .tool-menu-list { display: grid; grid-template-columns: repeat(4, minmax(110px, 1fr)); gap: 12px; } .tool-menu .tool-category-item { display: flex; flex-direction: column; align-items: center; gap: 10px; padding: 14px 10px; border: 1px solid rgba(118, 103, 84, 0.14); border-radius: 10px; background: rgba(255, 255, 255, 0.88); font-size: 13px; aspect-ratio: 1 / 1; min-height: 0; justify-content: space-between; } .tool-menu .tool-category-item.disabled { opacity: 0.55; } .tool-menu .tool-category-label { flex: 1; font-size: 13px; font-weight: 500; color: var(--claude-text); display: inline-flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px; text-align: center; white-space: nowrap; line-height: 1.4; } .tool-category-icon { font-size: 20px; } .tool-menu .tool-category-toggle { width: 100% !important; display: inline-flex; align-items: center; justify-content: center; padding: 6px 12px; text-align: center; white-space: nowrap; margin-top: auto; } .menu-btn { width: 100%; padding: 8px 14px; border: 1px solid rgba(118, 103, 84, 0.14); border-radius: 8px; font-size: 13px; font-weight: 500; text-align: left; background: rgba(255, 255, 255, 0.78); color: var(--claude-text); cursor: pointer; transition: all 0.2s ease; } .menu-btn:not(:disabled):hover { background: rgba(255, 255, 255, 0.95); transform: translateY(-1px); } .menu-btn:disabled { opacity: 0.5; cursor: not-allowed; } .menu-btn.compress-entry { background: rgba(255, 255, 255, 0.78); color: var(--claude-success); } .menu-btn.compress-entry:not(:disabled):hover { background: rgba(255, 255, 255, 0.95); } .menu-btn.clear-entry { background: rgba(255, 255, 255, 0.78); color: #bf422b; } .menu-btn.clear-entry:not(:disabled):hover { background: rgba(255, 255, 255, 0.95); } .settings-menu-enter-active, .settings-menu-leave-active { transition: opacity 0.18s ease, transform 0.18s ease; } .settings-menu-enter-from, .settings-menu-leave-to { opacity: 0; transform: translateY(6px); } /* 聚焦文件 */ .focused-files { padding: 16px; } o-files { text-align: center; color: var(--claude-text-secondary); padding: 60px 20px; font-size: 14px; } .file-tabs { display: flex; flex-direction: column; gap: 12px; } .file-tab { border: 1px solid var(--claude-border); border-radius: 12px; overflow: hidden; background: rgba(255, 255, 255, 0.75); box-shadow: 0 12px 28px rgba(61, 57, 41, 0.08); } .tab-header { background: rgba(218, 119, 86, 0.08); padding: 10px 16px; display: flex; justify-content: space-between; align-items: center; font-size: 14px; border-bottom: 1px solid var(--claude-border); } .file-name { font-weight: 500; color: var(--claude-text); } .file-size { color: var(--claude-text-secondary); font-size: 12px; } .file-content { max-height: 320px; overflow-y: auto; background: #1e1e1e; } .file-content pre { margin: 0; padding: 16px; } .file-content code { font-family: 'SF Mono', 'Monaco', 'Consolas', monospace; font-size: 13px; line-height: 1.5; color: #aed581; } /* 系统消息 */ .system-message .collapsible-block { margin: 0; } /* Markdown样式 */ .text-content h1, .text-content h2, .text-content h3 { margin-top: 20px; margin-bottom: 12px; font-weight: 600; color: var(--claude-text); } .text-content p { margin-bottom: 12px; } .text-content pre { background: rgba(255, 255, 255, 0.78); padding: 16px; border-radius: 12px; overflow-x: auto; margin: 16px 0; border: 1px solid var(--claude-border); box-shadow: 0 10px 24px rgba(61, 57, 41, 0.08); } .text-content code { background: rgba(218, 119, 86, 0.1); padding: 2px 6px; border-radius: 4px; font-size: 14px; font-family: 'SF Mono', 'Monaco', 'Consolas', monospace; color: var(--claude-accent-strong); } @keyframes blink { 0%, 50% { opacity: 1; } 51%, 100% { opacity: 0; } } /* ========================================= */ /* 响应式设计 */ /* ========================================= */ @media (max-width: 1200px) { .conversation-sidebar { width: 260px; } .left-sidebar, .right-sidebar { width: 300px !important; } } @media (max-width: 768px) { .conversation-sidebar { position: absolute; left: 0; top: 0; height: 100%; z-index: 1000; box-shadow: 2px 0 10px rgba(0, 0, 0, 0.1); transform: translateX(-100%); } .conversation-sidebar:not(.collapsed) { transform: translateX(0); } .left-sidebar, .right-sidebar { display: none; } .resize-handle { display: none; } } .token-count { color: var(--claude-accent); font-weight: 500; } /* 顶部 Token 抽屉 */ .token-drawer { position: absolute; top: 20px; left: 0; right: 0; width: 100%; display: flex; justify-content: center; align-items: flex-start; z-index: 20; pointer-events: none; } .token-display-panel { width: min(860px, 92%); background: var(--claude-panel); border: 1px solid var(--claude-border); border-radius: 26px; box-shadow: 0 24px 42px rgba(61, 57, 41, 0.18); transition: transform 0.35s ease, opacity 0.35s ease; pointer-events: auto; } .token-drawer.collapsed .token-display-panel { transform: translateY(-120%); opacity: 0; pointer-events: none; } .token-panel-content { padding: 16px 36px; } .token-panel-grid { display: grid; gap: 24px; } .usage-dashboard { position: relative; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); grid-auto-rows: auto; column-gap: 48px; row-gap: 32px; padding: 8px 0; } .usage-dashboard::before { content: ''; position: absolute; top: 0; bottom: 0; left: 50%; width: 1px; background: var(--claude-border); transform: translateX(-0.5px); pointer-events: none; z-index: 0; } .usage-cell { display: flex; flex-direction: column; gap: 16px; position: relative; z-index: 1; } .usage-dashboard .panel-card { border-left: none; padding: 0; } .usage-cell--left { padding-right: 24px; } .usage-cell--right { padding-left: 24px; } .usage-title { display: flex; justify-content: space-between; align-items: center; font-size: 14px; font-weight: 600; color: var(--claude-text); } .stat-grid { display: grid; gap: 12px; } .stat-grid--triple { grid-template-columns: repeat(3, minmax(0, 1fr)); } .stat-grid--double { grid-template-columns: repeat(2, minmax(0, 1fr)); } .stat-block { display: flex; flex-direction: column; gap: 6px; } .stat-label { color: var(--claude-text-secondary); font-size: 12px; letter-spacing: 0.04em; } .stat-value { font-weight: 600; font-size: 18px; font-variant-numeric: tabular-nums; color: var(--claude-text); } .stat-value--accent { color: var(--claude-accent); font-size: 20px; } .stat-value--success { color: var(--claude-success); } .stat-value--warning { color: var(--claude-warning); } .stat-value--mono { font-family: 'SF Mono', 'Monaco', 'Consolas', monospace; font-size: 16px; } .stat-meta, .stat-foot { font-size: 12px; color: var(--claude-text-secondary); } .stat-meta { text-transform: none; } .stat-foot { margin-top: 2px; } .usage-placeholder { font-size: 13px; color: var(--claude-text-secondary); } .panel-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(360px, 1fr)); gap: 24px; align-items: stretch; } .token-card { flex: 1 1 320px; } .token-card.compact, .container-stats-card { display: flex; flex-direction: column; height: 100%; justify-content: space-between; } .token-stats { display: flex; justify-content: space-between; gap: 32px; flex-wrap: wrap; } .token-stats.inline-row { flex-wrap: nowrap; gap: 24px; align-items: flex-start; } .token-stats.inline-row > .token-item { flex: 1 1 0; min-width: 0; } .quota-inline { display: flex; gap: 24px; flex-wrap: nowrap; justify-content: space-between; align-items: flex-end; } .quota-inline-item { flex: 1 1 0; min-width: 0; } .usage-quota-card { margin-top: 16px; } .quota-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 12px; } .quota-label { font-size: 12px; color: var(--claude-text-secondary); font-weight: 500; } .quota-value { font-weight: 600; font-size: 16px; color: var(--claude-text); } .quota-reset { font-size: 12px; color: var(--claude-text-secondary); } .token-item { display: flex; flex-direction: column; gap: 4px; min-width: 120px; } .token-label { color: var(--claude-text-secondary); font-size: 11px; font-weight: 500; text-transform: uppercase; letter-spacing: 0.04em; } .token-value { color: var(--claude-text); font-weight: 600; font-size: 18px; font-variant-numeric: tabular-nums; } .token-value.current { color: var(--claude-accent); font-size: 20px; } .token-value.input { color: var(--claude-success); } .token-value.output { color: var(--claude-warning); } .panel-row-title { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; font-size: 12px; color: var(--claude-text-secondary); text-transform: uppercase; letter-spacing: 0.04em; } .double-metric { display: flex; gap: 24px; } .status-pill { padding: 2px 10px; border-radius: 999px; font-size: 11px; font-weight: 600; background: rgba(125, 109, 94, 0.15); color: var(--claude-text-secondary); } .quota-toast { position: fixed; top: 24px; right: 32px; padding: 12px 18px; border-radius: 12px; background: var(--claude-bg); border: 1px solid var(--claude-border-strong); box-shadow: 0 12px 30px rgba(0, 0, 0, 0.18); z-index: 2000; max-width: 320px; color: var(--claude-text); font-weight: 500; display: flex; align-items: center; gap: 12px; } .quota-toast-label { display: block; flex: 1; } .quota-toast-fade-enter-active, .quota-toast-fade-leave-active { transition: opacity 0.2s ease, transform 0.2s ease; } .quota-toast-fade-enter-from, .quota-toast-fade-leave-to { opacity: 0; transform: translateX(20px); } .toast-stack { position: fixed; top: 96px; right: 32px; width: min(320px, calc(100vw - 32px)); display: flex; flex-direction: column; gap: 12px; z-index: 2050; } .toast-stack.toast-stack--empty { pointer-events: none; } .app-toast { display: flex; align-items: flex-start; gap: 12px; padding: 12px 14px; border-radius: 14px; background: var(--claude-bg); border: 1px solid var(--claude-border-strong, rgba(118,103,84,0.35)); box-shadow: 0 12px 30px rgba(0, 0, 0, 0.18); color: var(--claude-text); } .app-toast::before { content: ""; width: 4px; border-radius: 999px; background: var(--claude-text-secondary); align-self: stretch; } .app-toast--success::before { background: var(--claude-success); } .app-toast--warning::before { background: var(--claude-warning); } .app-toast--error::before { background: #d45f5f; } .app-toast-body { flex: 1; display: flex; flex-direction: column; gap: 4px; } .app-toast-title { font-weight: 600; } .app-toast-message { font-size: 13px; line-height: 1.4; } .toast-close { border: none; background: transparent; color: var(--claude-text-secondary); font-size: 16px; cursor: pointer; padding: 2px; } .toast-close:hover { color: var(--claude-text); } .confirm-overlay { position: fixed; inset: 0; background: rgba(8, 8, 8, 0.45); z-index: 2200; display: flex; align-items: center; justify-content: center; padding: 20px; } .confirm-modal { width: min(360px, 100%); background: var(--claude-bg); border: 1px solid var(--claude-border-strong, rgba(118,103,84,0.35)); border-radius: 18px; padding: 24px; box-shadow: 0 18px 40px rgba(61, 57, 41, 0.22); } .confirm-title { font-size: 16px; font-weight: 600; margin-bottom: 12px; } .confirm-message { font-size: 14px; color: var(--claude-text-secondary); } .confirm-actions { display: flex; justify-content: flex-end; gap: 12px; margin-top: 24px; } .confirm-button { border: 1px solid var(--claude-border-strong, rgba(118,103,84,0.35)); background: transparent; color: var(--claude-text); border-radius: 10px; padding: 8px 20px; font-weight: 500; cursor: pointer; } .confirm-button--primary { background: var(--claude-accent); border-color: var(--claude-accent-strong); color: #fff; } .status-pill--running { background: rgba(118, 176, 134, 0.18); color: var(--claude-success); } .status-pill--stopped { background: rgba(217, 152, 69, 0.2); color: var(--claude-warning); } .status-pill--host { background: rgba(125, 109, 94, 0.12); color: var(--claude-text-secondary); } .container-metric-grid { display: grid; grid-template-columns: repeat(2, minmax(150px, 1fr)); gap: 16px 24px; } .container-metric { display: flex; flex-direction: column; gap: 4px; } .metric-label { color: var(--claude-text-secondary); font-size: 11px; letter-spacing: 0.04em; text-transform: uppercase; } .metric-value { font-weight: 600; color: var(--claude-text); font-size: 16px; font-variant-numeric: tabular-nums; } .metric-subtext { color: var(--claude-text-secondary); font-size: 12px; } .container-empty { color: var(--claude-text-secondary); font-size: 13px; padding: 12px 0; } @media (max-width: 900px) { .token-panel-layout { flex-direction: column; gap: 20px; } .container-stats-card { border-left: none; border-top: 1px solid var(--claude-border); padding-left: 0; padding-top: 16px; } .token-stats { flex-direction: column; gap: 16px; } .usage-dashboard { grid-template-columns: 1fr; row-gap: 20px; padding: 0; } .usage-dashboard::before { display: none; } .usage-cell--left, .usage-cell--right { padding: 0; } .stat-grid--triple { grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); } .token-item { min-width: auto; } .token-panel-content { padding: 18px 24px; } } /* Markdown列表样式 - 修复偏左问题 */ .text-content ul, .text-content ol { margin-left: 24px; /* 增加左边距 */ padding-left: 0; margin-bottom: 12px; } .text-content ul { list-style-type: disc; /* 实心圆点 */ } .text-content ul ul { list-style-type: circle; /* 空心圆点 */ margin-top: 6px; } .text-content ol { list-style-type: decimal; /* 数字列表 */ } .text-content li { margin-bottom: 6px; line-height: 1.6; } /* 搜索结果展示 */ .search-meta { font-size: 14px; color: var(--claude-text-secondary); line-height: 1.6; margin-bottom: 12px; word-break: break-word; } .search-result-list { display: flex; flex-direction: column; gap: 10px; } .search-result-item { padding: 10px 12px; border: 1px solid rgba(118, 103, 84, 0.16); border-radius: 8px; background: rgba(255, 255, 255, 0.65); word-break: break-word; } .search-result-title { font-weight: 600; margin-bottom: 6px; color: var(--claude-text); } .search-result-url a { color: var(--claude-accent-strong); text-decoration: none; word-break: break-all; } .search-result-url a:hover { text-decoration: underline; } .search-empty { font-size: 13px; color: var(--claude-text-secondary); font-style: italic; } .personal-page-overlay { position: fixed; inset: 0; background: rgba(33, 24, 14, 0.55); backdrop-filter: blur(12px); display: flex; align-items: center; justify-content: center; z-index: 400; padding: 20px; transition: opacity 0.25s ease, backdrop-filter 0.25s ease; will-change: opacity, backdrop-filter; } .personal-page-card { width: min(95vw, 860px); background: #fffaf4; border-radius: 24px; border: 1px solid rgba(118, 103, 84, 0.25); box-shadow: 0 28px 60px rgba(38, 28, 18, 0.25); padding: 40px; text-align: left; color: var(--claude-text); max-height: calc(100vh - 40px); overflow: hidden; } .personal-page-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; margin-bottom: 24px; } .personal-page-actions { display: flex; gap: 10px; align-items: flex-start; } .personal-page-header h2 { font-size: 24px; margin: 0; } .personal-page-header p { margin: 6px 0 0; color: var(--claude-text-secondary); font-size: 14px; } .personal-page-close { align-self: flex-start; padding: 8px 18px; border-radius: 999px; border: none; background: linear-gradient(135deg, var(--claude-accent) 0%, var(--claude-accent-strong) 100%); color: #fffdf8; font-size: 13px; font-weight: 600; cursor: pointer; box-shadow: 0 14px 28px rgba(189, 93, 58, 0.2); transition: transform 0.2s ease, box-shadow 0.2s ease; } .personal-page-close:hover { transform: translateY(-1px); box-shadow: 0 18px 34px rgba(189, 93, 58, 0.3); } .personal-page-logout { align-self: flex-start; padding: 8px 16px; border-radius: 999px; border: 1px solid rgba(118, 103, 84, 0.35); background: rgba(255, 255, 255, 0.92); color: var(--claude-text); font-size: 13px; font-weight: 600; cursor: pointer; transition: background 0.2s ease, box-shadow 0.2s ease; } .personal-page-logout:hover { background: #fff; box-shadow: 0 12px 24px rgba(38, 28, 18, 0.12); } .personalization-body { display: flex; flex-direction: column; gap: 20px; overflow-y: auto; max-height: calc(100vh - 180px); padding-right: 6px; scrollbar-width: none; -ms-overflow-style: none; } .personalization-body::-webkit-scrollbar { display: none; } .personal-toggle { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 16px 18px; border-radius: 16px; background: rgba(255, 255, 255, 0.85); border: 1px solid rgba(118, 103, 84, 0.2); } .toggle-text { display: flex; flex-direction: column; gap: 6px; } .toggle-title { font-weight: 600; } .toggle-desc { color: var(--claude-text-secondary); font-size: 13px; } .toggle-switch { position: relative; width: 46px; height: 26px; } .toggle-switch input { opacity: 0; width: 0; height: 0; } .switch-slider { position: absolute; inset: 0; background-color: #d7d1c5; border-radius: 30px; transition: background-color 0.2s ease; } .switch-slider::before { content: ""; position: absolute; left: 4px; top: 4px; width: 18px; height: 18px; border-radius: 50%; background: #fff; transition: transform 0.2s ease; } .toggle-switch input:checked + .switch-slider { background: var(--claude-accent); } .toggle-switch input:checked + .switch-slider::before { transform: translateX(20px); } .personal-form { display: flex; flex-direction: column; gap: 18px; flex: 1; } .personalization-sections { display: flex; gap: 18px; align-items: flex-start; flex-wrap: nowrap; } .personal-section { flex: 1 1 0; min-width: 240px; background: rgba(255, 255, 255, 0.9); border: 1px solid rgba(118, 103, 84, 0.25); border-radius: 18px; padding: 16px 18px; display: flex; flex-direction: column; gap: 16px; } .personal-right-column { display: flex; flex-direction: column; gap: 14px; flex: 1 1 0; max-width: none; align-self: stretch; } .personal-right-column .personal-section { flex: 1 1 auto; } .personal-section.personal-considerations .personal-field { flex: 1; display: flex; flex-direction: column; } .personal-section.personal-considerations .consideration-list { max-height: 260px; min-height: 220px; flex: 1; overflow-y: auto; scrollbar-width: none; -ms-overflow-style: none; } .personal-section.personal-considerations .consideration-list::-webkit-scrollbar { display: none; } .personal-section.personal-considerations .consideration-item { background: rgba(255, 255, 255, 0.95); } @media (max-width: 1024px) { .personalization-sections { flex-direction: column; flex-wrap: wrap; } .personal-right-column { width: 100%; max-width: none; } } .personal-field { display: flex; flex-direction: column; gap: 10px; font-size: 14px; } .personal-field input { width: 100%; padding: 10px 14px; border-radius: 12px; border: 1px solid rgba(118, 103, 84, 0.4); background: rgba(255, 255, 255, 0.9); font-size: 14px; } .personal-field input:focus { outline: 2px solid rgba(189, 93, 58, 0.35); border-color: rgba(189, 93, 58, 0.6); } .tone-preset-row { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; font-size: 13px; color: var(--claude-text-secondary); } .tone-preset-buttons { display: flex; flex-wrap: wrap; gap: 6px; } .tone-preset-buttons button { padding: 4px 10px; border-radius: 999px; border: 1px solid rgba(118, 103, 84, 0.4); background: #fff; font-size: 13px; cursor: pointer; } .tone-preset-buttons button:hover { border-color: var(--claude-accent); color: var(--claude-accent); } .consideration-input { display: flex; gap: 8px; align-items: center; } .consideration-input input { flex: 1; } .consideration-add { width: 38px; height: 38px; border-radius: 12px; border: none; background: var(--claude-accent); color: #fffdf8; font-size: 20px; font-weight: 600; cursor: pointer; } .consideration-add:disabled { opacity: 0.4; cursor: not-allowed; } .consideration-list { list-style: none; margin: 6px 0 0; padding: 0; display: flex; flex-direction: column; gap: 8px; } .consideration-item { display: flex; align-items: center; gap: 10px; padding: 10px 12px; border-radius: 12px; border: 1px dashed rgba(118, 103, 84, 0.5); background: rgba(255, 255, 255, 0.9); cursor: grab; } .drag-handle { font-size: 16px; color: var(--claude-text-secondary); } .consideration-text { flex: 1; font-size: 14px; color: var(--claude-text); } .consideration-remove { border: none; background: none; font-size: 18px; line-height: 1; cursor: pointer; color: #d64545; padding: 0 4px; } .consideration-hint, .consideration-limit { font-size: 13px; color: var(--claude-text-secondary); } .personal-form-actions { display: flex; align-items: center; gap: 8px; margin-top: auto; padding: 12px 0 0; justify-content: flex-end; } .personal-status-group { flex: 0 0 auto; display: flex; align-items: center; gap: 4px; min-height: 22px; } .personal-form-actions .primary { padding: 10px 20px; border: none; border-radius: 999px; background: linear-gradient(135deg, var(--claude-accent) 0%, var(--claude-accent-strong) 100%); color: #fff; font-weight: 600; cursor: pointer; } .personal-form-actions .primary:disabled { opacity: 0.6; cursor: not-allowed; } .personal-form-actions .status { font-size: 13px; } .personal-form-actions .status.success { color: #0f9d58; } .personal-form-actions .status.error { color: #d64545; } .personal-status-fade-enter-active, .personal-status-fade-leave-active { transition: opacity 0.25s ease; } .personal-status-fade-enter-from, .personal-status-fade-leave-to { opacity: 0; } .personalization-loading { padding: 32px 0; text-align: center; color: var(--claude-text-secondary); font-size: 14px; } } .personal-page-fade-enter-active, .personal-page-fade-leave-active { transition: opacity 0.25s ease, backdrop-filter 0.25s ease; } .personal-page-fade-enter-from, .personal-page-fade-leave-to { opacity: 0; backdrop-filter: blur(0); } .personal-page-overlay.personal-page-fade-enter-active .personal-page-card, .personal-page-overlay.personal-page-fade-leave-active .personal-page-card { transition: transform 0.25s ease, opacity 0.25s ease; } .personal-page-overlay.personal-page-fade-enter-from .personal-page-card, .personal-page-overlay.personal-page-fade-leave-to .personal-page-card { transform: translateY(18px) scale(0.985); opacity: 0; } /* 彩蛋灌水特效 */ .easter-egg-overlay { position: fixed; inset: 0; pointer-events: none; display: flex; align-items: flex-end; justify-content: center; opacity: 0; transition: opacity 0.6s ease; z-index: 80; } .easter-egg-overlay.active { opacity: 1; } .panel-card { border-left: 1px solid var(--claude-border); padding: 0 0 0 0; }