refactor(naming): 移除代码中的第三方产品名

- DeepSeekClient → APIClient(含 7 个 mixin,38 个文件)
- --claude-* CSS 变量全部替换为新语义 token,删除 _tokens.scss 兼容别名
- build_openai_tools → build_llm_tools
- login/register.html 主题 key claude → classic;terminal.html 变量改 --app- 前缀
- 注释中的 Claude 归因描述中性化
- 顺带删除误跟踪的 __pycache__ .pyc 缓存
This commit is contained in:
JOJO 2026-07-28 18:43:03 +08:00
parent 0eaa8ba450
commit 3c66c6b05f
109 changed files with 755 additions and 776 deletions

View File

@ -2,7 +2,7 @@
模型的 API 端点 / 密钥 / 模型 ID 现已统一由 ``config/custom_models.json``
``config/model_profiles.py`` 解析为模型档案描述并在运行时通过
``DeepSeekClient.apply_profile`` 注入旧的 ``AGENT_API_BASE_URL`` /
``APIClient.apply_profile`` 注入旧的 ``AGENT_API_BASE_URL`` /
``AGENT_API_KEY`` / ``AGENT_MODEL_ID``以及 THINKING / TITLE 三件套属于早期
把模型逻辑硬编码在程序里的残留已移除没有任何可用模型时
``model_profiles.get_default_model_key`` 会直接报错提示去配置模型

View File

@ -57,7 +57,7 @@ from modules.mcp_client_manager import MCPClientManager
from core.tool_config import TOOL_CATEGORIES
from utils.api_client import DeepSeekClient
from utils.api_client import APIClient
from utils.context_manager import ContextManager
from utils.conversation_manager import ConversationManager
from utils.host_workspace_debug import write_host_workspace_debug
@ -98,7 +98,7 @@ class MainTerminal(MainTerminalCommandMixin, MainTerminalContextMixin, MainTermi
self.usage_tracker = usage_tracker
# 初始化组件
self.api_client = DeepSeekClient(thinking_mode=self.thinking_mode)
self.api_client = APIClient(thinking_mode=self.thinking_mode)
self.api_client.project_path = project_path
self.model_key = get_default_model_key()
self.model_profile = get_model_profile(self.model_key)

View File

@ -71,7 +71,7 @@ except ImportError:
from modules.container_monitor import collect_stats, inspect_state
from core.tool_config import TOOL_CATEGORIES
from utils.api_client import DeepSeekClient
from utils.api_client import APIClient
from utils.context_manager import ContextManager
from utils.tool_result_formatter import (
extract_mcp_content_for_context,

View File

@ -70,7 +70,7 @@ from modules.custom_tool_executor import CustomToolExecutor
from modules.container_monitor import collect_stats, inspect_state
from core.tool_config import TOOL_CATEGORIES
from utils.api_client import DeepSeekClient
from utils.api_client import APIClient
from utils.context_manager import ContextManager, AUTO_SHALLOW_PLACEHOLDER
from utils.host_workspace_debug import write_host_workspace_debug
from utils.tool_result_formatter import format_tool_result_for_context

View File

@ -70,7 +70,7 @@ from modules.custom_tool_executor import CustomToolExecutor
from modules.container_monitor import collect_stats, inspect_state
from core.tool_config import TOOL_CATEGORIES
from utils.api_client import DeepSeekClient
from utils.api_client import APIClient
from utils.context_manager import ContextManager, AUTO_SHALLOW_PLACEHOLDER
from utils.host_workspace_debug import write_host_workspace_debug
from utils.tool_result_formatter import format_tool_result_for_context

View File

@ -72,7 +72,7 @@ from modules.custom_tool_executor import CustomToolExecutor
from modules.container_monitor import collect_stats, inspect_state
from core.tool_config import TOOL_CATEGORIES
from utils.api_client import DeepSeekClient
from utils.api_client import APIClient
from utils.context_manager import ContextManager, AUTO_SHALLOW_PLACEHOLDER
from utils.host_workspace_debug import write_host_workspace_debug
from utils.tool_result_formatter import format_tool_result_for_context

View File

@ -71,7 +71,7 @@ from modules.custom_tool_executor import CustomToolExecutor
from modules.container_monitor import collect_stats, inspect_state
from core.tool_config import TOOL_CATEGORIES
from utils.api_client import DeepSeekClient
from utils.api_client import APIClient
from utils.context_manager import ContextManager, AUTO_SHALLOW_PLACEHOLDER
from utils.host_workspace_debug import write_host_workspace_debug
from utils.tool_result_formatter import format_tool_result_for_context

View File

@ -70,7 +70,7 @@ from modules.custom_tool_executor import CustomToolExecutor
from modules.container_monitor import collect_stats, inspect_state
from core.tool_config import TOOL_CATEGORIES
from utils.api_client import DeepSeekClient
from utils.api_client import APIClient
from utils.context_manager import ContextManager, AUTO_SHALLOW_PLACEHOLDER
from utils.host_workspace_debug import write_host_workspace_debug
from utils.tool_result_formatter import format_tool_result_for_context

View File

@ -70,7 +70,7 @@ from modules.custom_tool_executor import CustomToolExecutor
from modules.container_monitor import collect_stats, inspect_state
from core.tool_config import TOOL_CATEGORIES
from utils.api_client import DeepSeekClient
from utils.api_client import APIClient
from utils.context_manager import ContextManager, AUTO_SHALLOW_PLACEHOLDER
from utils.host_workspace_debug import write_host_workspace_debug
from utils.tool_result_formatter import format_tool_result_for_context

View File

@ -68,7 +68,7 @@ from modules.mcp_server_registry import MCPServerRegistry, build_default_mcp_cat
from modules.container_monitor import collect_stats, inspect_state
from core.tool_config import TOOL_CATEGORIES
from utils.api_client import DeepSeekClient
from utils.api_client import APIClient
from utils.context_manager import ContextManager
from utils.tool_result_formatter import format_tool_result_for_context
from utils.logger import setup_logger

View File

@ -68,7 +68,7 @@ from modules.mcp_server_registry import MCPServerRegistry, build_default_mcp_cat
from modules.container_monitor import collect_stats, inspect_state
from core.tool_config import TOOL_CATEGORIES
from utils.api_client import DeepSeekClient
from utils.api_client import APIClient
from utils.context_manager import ContextManager
from utils.tool_result_formatter import format_tool_result_for_context
from utils.logger import setup_logger

View File

@ -68,7 +68,7 @@ from modules.mcp_server_registry import MCPServerRegistry, build_default_mcp_cat
from modules.container_monitor import collect_stats, inspect_state
from core.tool_config import TOOL_CATEGORIES
from utils.api_client import DeepSeekClient
from utils.api_client import APIClient
from utils.context_manager import ContextManager
from utils.tool_result_formatter import format_tool_result_for_context
from utils.logger import setup_logger

View File

@ -68,7 +68,7 @@ from modules.mcp_server_registry import MCPServerRegistry, build_default_mcp_cat
from modules.container_monitor import collect_stats, inspect_state
from core.tool_config import TOOL_CATEGORIES
from utils.api_client import DeepSeekClient
from utils.api_client import APIClient
from utils.context_manager import ContextManager
from utils.tool_result_formatter import format_tool_result_for_context
from utils.logger import setup_logger

View File

@ -68,7 +68,7 @@ from modules.mcp_server_registry import MCPServerRegistry, build_default_mcp_cat
from modules.container_monitor import collect_stats, inspect_state
from core.tool_config import TOOL_CATEGORIES
from utils.api_client import DeepSeekClient
from utils.api_client import APIClient
from utils.context_manager import ContextManager
from utils.tool_result_formatter import format_tool_result_for_context
from utils.logger import setup_logger
@ -193,7 +193,7 @@ class ToolsDefinitionCustomMcpMixin:
self.mcp_tool_alias_map = {}
return []
try:
tool_defs, alias_map = manager.build_openai_tools(
tool_defs, alias_map = manager.build_llm_tools(
ensure_discovery=True,
discovery_timeout_seconds=10,
)

View File

@ -68,7 +68,7 @@ from modules.mcp_server_registry import MCPServerRegistry, build_default_mcp_cat
from modules.container_monitor import collect_stats, inspect_state
from core.tool_config import TOOL_CATEGORIES
from utils.api_client import DeepSeekClient
from utils.api_client import APIClient
from utils.context_manager import ContextManager
from utils.tool_result_formatter import format_tool_result_for_context
from utils.logger import setup_logger

View File

@ -68,7 +68,7 @@ from modules.mcp_server_registry import MCPServerRegistry, build_default_mcp_cat
from modules.container_monitor import collect_stats, inspect_state
from core.tool_config import TOOL_CATEGORIES
from utils.api_client import DeepSeekClient
from utils.api_client import APIClient
from utils.context_manager import ContextManager
from utils.tool_result_formatter import format_tool_result_for_context
from utils.logger import setup_logger

View File

@ -68,7 +68,7 @@ from modules.mcp_server_registry import MCPServerRegistry, build_default_mcp_cat
from modules.container_monitor import collect_stats, inspect_state
from core.tool_config import TOOL_CATEGORIES
from utils.api_client import DeepSeekClient
from utils.api_client import APIClient
from utils.context_manager import ContextManager
from utils.tool_result_formatter import format_tool_result_for_context
from utils.logger import setup_logger

View File

@ -68,7 +68,7 @@ from modules.mcp_server_registry import MCPServerRegistry, build_default_mcp_cat
from modules.container_monitor import collect_stats, inspect_state
from core.tool_config import TOOL_CATEGORIES
from utils.api_client import DeepSeekClient
from utils.api_client import APIClient
from utils.context_manager import ContextManager
from utils.tool_result_formatter import format_tool_result_for_context
from utils.logger import setup_logger

View File

@ -68,7 +68,7 @@ from modules.mcp_server_registry import MCPServerRegistry, build_default_mcp_cat
from modules.container_monitor import collect_stats, inspect_state
from core.tool_config import TOOL_CATEGORIES
from utils.api_client import DeepSeekClient
from utils.api_client import APIClient
from utils.context_manager import ContextManager
from utils.tool_result_formatter import format_tool_result_for_context
from utils.logger import setup_logger

View File

@ -95,7 +95,7 @@ from modules.custom_tool_executor import CustomToolExecutor
from modules.container_monitor import collect_stats, inspect_state
from core.tool_config import TOOL_CATEGORIES
from utils.api_client import DeepSeekClient
from utils.api_client import APIClient
from utils.context_manager import ContextManager
from utils.tool_result_formatter import format_tool_result_for_context
from utils.logger import setup_logger
@ -972,7 +972,7 @@ class MainTerminalToolsExecutionMixin:
servers = [item for item in servers if item.get("id") == server_id]
# 读取当前 alias 映射(不强制再次发现)
_, alias_map = manager.build_openai_tools(ensure_discovery=False)
_, alias_map = manager.build_llm_tools(ensure_discovery=False)
aliases_by_server = {}
for alias, binding in (alias_map or {}).items():
sid = getattr(binding, "server_id", "")

View File

@ -73,7 +73,7 @@ except ImportError:
from modules.container_monitor import collect_stats, inspect_state
from core.tool_config import TOOL_CATEGORIES
from utils.api_client import DeepSeekClient
from utils.api_client import APIClient
from utils.context_manager import ContextManager
from utils.tool_result_formatter import format_tool_result_for_context
from utils.logger import setup_logger

View File

@ -72,7 +72,7 @@ from modules.custom_tool_executor import CustomToolExecutor
from modules.container_monitor import collect_stats, inspect_state
from core.tool_config import TOOL_CATEGORIES
from utils.api_client import DeepSeekClient
from utils.api_client import APIClient
from utils.context_manager import ContextManager
from utils.tool_result_formatter import format_tool_result_for_context
from utils.logger import setup_logger

View File

@ -389,7 +389,7 @@ class MCPClientManager:
continue
yield item
def build_openai_tools(
def build_llm_tools(
self,
*,
ensure_discovery: bool = True,
@ -461,7 +461,7 @@ class MCPClientManager:
return self._latest_alias_map[tool_alias]
# 容错:从缓存动态重建一遍
_, rebuilt = self.build_openai_tools(ensure_discovery=False)
_, rebuilt = self.build_llm_tools(ensure_discovery=False)
return rebuilt.get(tool_alias)
def call_tool_by_alias(

View File

@ -1,6 +1,6 @@
"""Conversation-scoped shallow file versioning for workspace edits.
Mirrors Claude Code's file-history approach:
Mirrors the file-history approach of mainstream AI coding tools:
- Only files touched by write_file / edit_file are tracked.
- Before each edit the current content is backed up.
- A snapshot is taken per user message, referencing the latest backup version

View File

@ -20,7 +20,7 @@ from modules.sub_agent.toolkit import (
_format_tool_result,
_build_sub_agent_profile,
)
from utils.api_client import DeepSeekClient
from utils.api_client import APIClient
from utils.logger import setup_logger
if TYPE_CHECKING:
@ -540,7 +540,7 @@ class SubAgentTask:
return True
def _build_client(self) -> tuple:
"""加载模型配置并初始化 DeepSeekClient。"""
"""加载模型配置并初始化 APIClient。"""
config_path = self.manager.models_config_file
models: List[Dict[str, Any]] = []
default_key = ""
@ -567,7 +567,7 @@ class SubAgentTask:
if chosen_key not in model_map:
raise RuntimeError(f"未找到可用子智能体模型配置: {config_path}")
client = DeepSeekClient(thinking_mode=(self.thinking_mode == "thinking"), web_mode=True)
client = APIClient(thinking_mode=(self.thinking_mode == "thinking"), web_mode=True)
client.model_key = chosen_key
client.project_path = str(self.manager.project_path)
client.apply_profile(model_map[chosen_key])
@ -575,7 +575,7 @@ class SubAgentTask:
async def _call_model(
self,
client: DeepSeekClient,
client: APIClient,
model_key: str,
tools: List[Dict[str, Any]],
) -> tuple:

View File

@ -355,7 +355,7 @@ def _format_tool_result(name: str, raw: Any) -> str:
def _build_sub_agent_profile(model_raw: Dict[str, Any]) -> Optional[Dict[str, Any]]:
"""把 sub_agent_models.json 中的模型条目转成 DeepSeekClient.apply_profile 所需格式。"""
"""把 sub_agent_models.json 中的模型条目转成 APIClient.apply_profile 所需格式。"""
name = str(model_raw.get("name") or model_raw.get("model_name") or model_raw.get("model") or "").strip()
url = str(_parse_env_ref(model_raw.get("url") or model_raw.get("base_url") or "") or "").strip()
api_key = str(_parse_env_ref(model_raw.get("apikey") or model_raw.get("api_key") or "") or "").strip()

View File

@ -248,7 +248,7 @@ from modules.user_container_manager import UserContainerManager
from modules.usage_tracker import UsageTracker, QUOTA_DEFAULTS
from utils.tool_result_formatter import format_tool_result_for_context
from utils.conversation_manager import ConversationManager
from utils.api_client import DeepSeekClient
from utils.api_client import APIClient
from .files import files_bp
app = Flask(__name__, static_folder=str(PROJECT_ROOT / 'static'))
@ -480,7 +480,7 @@ async def _generate_title_async(user_message: str) -> Optional[str]:
if not user_message:
_title_debug_log("skip_empty_user_message")
return None
client = DeepSeekClient(thinking_mode=False, web_mode=True)
client = APIClient(thinking_mode=False, web_mode=True)
try:
default_model = get_default_model_key()
client.model_key = default_model

View File

@ -10,7 +10,7 @@ from typing import Any, Dict, List, Optional
from core.web_terminal import WebTerminal
from config import LOGS_DIR
from utils.api_client import DeepSeekClient
from utils.api_client import APIClient
from config.model_profiles import get_default_model_key, get_model_profile
TITLE_DEBUG_DIR = Path(LOGS_DIR).expanduser().resolve() / "title_debug"
@ -51,7 +51,7 @@ async def _generate_title_async(
_title_debug_log("skip_empty_user_message")
return None
client = DeepSeekClient(thinking_mode=False, web_mode=True)
client = APIClient(thinking_mode=False, web_mode=True)
try:
default_model = get_default_model_key()
client.model_key = default_model

View File

@ -57,7 +57,7 @@ from utils.perf_log import perf_log, PerfTimer
from core.web_terminal import WebTerminal
from utils.tool_result_formatter import format_tool_result_for_context
from utils.conversation_manager import ConversationManager
from utils.api_client import DeepSeekClient
from utils.api_client import APIClient
from .auth_helpers import api_login_required, resolve_admin_policy, get_current_user_record, get_current_username
from .context import with_terminal, get_terminal_for_sid, get_gui_manager, get_upload_guard, build_upload_error_response, ensure_conversation_loaded, reset_system_state, get_user_resources, get_or_create_usage_tracker

View File

@ -12,11 +12,11 @@
(function () {
try {
var key = window.localStorage.getItem('agents_ui_theme');
var theme = key === 'light' || key === 'dark' || key === 'claude' ? key : 'claude';
var theme = key === 'light' || key === 'dark' || key === 'classic' ? key : 'classic';
document.documentElement.setAttribute('data-theme', theme);
document.body && document.body.setAttribute('data-theme', theme);
} catch (_e) {
document.documentElement.setAttribute('data-theme', 'claude');
document.documentElement.setAttribute('data-theme', 'classic');
}
})();
</script>

View File

@ -12,11 +12,11 @@
(function () {
try {
var key = window.localStorage.getItem('agents_ui_theme');
var theme = key === 'light' || key === 'dark' || key === 'claude' ? key : 'claude';
var theme = key === 'light' || key === 'dark' || key === 'classic' ? key : 'classic';
document.documentElement.setAttribute('data-theme', theme);
document.body && document.body.setAttribute('data-theme', theme);
} catch (_e) {
document.documentElement.setAttribute('data-theme', 'claude');
document.documentElement.setAttribute('data-theme', 'classic');
}
})();
</script>

View File

@ -977,7 +977,7 @@ button {
border: none;
border-radius: 999px;
padding: 10px 18px;
background: var(--claude-highlight);
background: var(--highlight);
color: #3b2f1d;
font-weight: 600;
cursor: pointer;
@ -996,7 +996,7 @@ button:disabled {
button:not(:disabled):hover {
transform: translateY(-1px);
background: var(--claude-accent);
background: var(--accent);
box-shadow: 0 8px 16px rgba(189, 93, 58, 0.25);
}
@ -1057,7 +1057,7 @@ button:not(:disabled):hover {
border-radius: 28px;
padding: 24px;
border: 1px solid rgba(118, 103, 84, 0.35);
box-shadow: var(--claude-shadow);
box-shadow: var(--shadow-card);
color: #23170b;
}
@ -1077,7 +1077,7 @@ button:not(:disabled):hover {
.metric-card h3 {
margin: 0;
font-size: 13px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
letter-spacing: 0.08em;
}
@ -1126,7 +1126,7 @@ button:not(:disabled):hover {
font-size: 12px;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.token-card strong {
@ -1160,7 +1160,7 @@ button:not(:disabled):hover {
.token-breakdown-header span {
font-size: 12px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.token-table-wrapper {
@ -1195,7 +1195,7 @@ button:not(:disabled):hover {
.token-empty {
margin: 0;
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 13px;
}
@ -1214,7 +1214,7 @@ button:not(:disabled):hover {
.leader-card h3 {
margin: 0 0 10px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 14px;
}
@ -1234,7 +1234,7 @@ button:not(:disabled):hover {
}
.leader-card .muted {
color: var(--claude-muted);
color: var(--text-muted);
}
.table-wrapper {
@ -1274,7 +1274,7 @@ th {
.status-badge.online {
background: rgba(118, 176, 134, 0.18);
color: var(--claude-success);
color: var(--state-success);
}
.status-badge.offline {
@ -1284,12 +1284,12 @@ th {
.status-badge.warning {
background: rgba(217, 152, 69, 0.2);
color: var(--claude-warning);
color: var(--state-warning);
}
.status-badge.danger {
background: rgba(189, 93, 58, 0.18);
color: var(--claude-accent-strong);
color: var(--accent-strong);
}
.progress-bar {
@ -1302,7 +1302,7 @@ th {
.progress-bar span {
display: block;
height: 100%;
background: linear-gradient(90deg, var(--claude-highlight), var(--claude-accent));
background: linear-gradient(90deg, var(--highlight), var(--accent));
}
.upload-feed {
@ -1329,7 +1329,7 @@ th {
display: flex;
gap: 10px;
flex-wrap: wrap;
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 12px;
}
@ -1366,7 +1366,7 @@ th {
display: inline-flex;
align-items: center;
gap: 6px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 13px;
}
@ -1383,7 +1383,7 @@ th {
}
.invite-card span {
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 13px;
}
@ -1416,7 +1416,7 @@ th {
align-items: center;
justify-content: center;
gap: 16px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.spinner {
@ -1497,7 +1497,7 @@ th {
.password-field label {
font-size: 13px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-weight: 600;
}
@ -1569,7 +1569,7 @@ th {
.user-search-selected .user-search-email {
font-size: 12px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
@ -1582,7 +1582,7 @@ th {
.user-search-arrow {
font-size: 12px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
transition: transform 0.15s ease;
flex-shrink: 0;
}
@ -1650,7 +1650,7 @@ th {
.user-search-item .user-search-email {
font-size: 12px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
@ -1669,7 +1669,7 @@ th {
.user-search-empty {
padding: 16px;
text-align: center;
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 13px;
}
@ -1686,7 +1686,7 @@ th {
border-radius: 12px;
cursor: pointer;
box-shadow: none;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.password-actions .ghost-btn:hover:not(:disabled) {
@ -1695,7 +1695,7 @@ th {
}
.password-success {
color: var(--claude-success);
color: var(--state-success);
margin: 0;
font-weight: 600;
}

View File

@ -569,7 +569,7 @@ button {
border: none;
border-radius: 12px;
padding: 10px 14px;
background: var(--claude-highlight);
background: var(--highlight);
color: #2a2013;
font-weight: 600;
cursor: pointer;

View File

@ -417,7 +417,7 @@ watch(secondaryVerified, async (val) => {
</script>
<style scoped>
/* Claude 经典:米色+白色+深棕的柔和高对比配色 */
/* 经典:米色+白色+深棕的柔和高对比配色 */
:global(html, body) {
min-height: 100%;
background:
@ -710,8 +710,8 @@ watch(secondaryVerified, async (val) => {
.primary {
background: linear-gradient(
135deg,
var(--claude-accent) 0%,
var(--claude-accent-strong) 100%
var(--accent) 0%,
var(--accent-strong) 100%
);
color: #fff;
border: none;

View File

@ -54,8 +54,8 @@ onMounted(() => {
--border: #e3d8c8;
--ink: #1a120b;
--muted: #6f635a;
--accent: var(--claude-accent);
--accent-strong: var(--claude-accent-strong);
--accent: var(--accent);
--accent-strong: var(--accent-strong);
--shadow: 0 16px 40px rgba(47, 32, 21, 0.12);
max-width: 1080px;

View File

@ -1386,7 +1386,7 @@ button:disabled {
.fancy-path {
fill: none;
stroke: var(--claude-text-secondary);
stroke: var(--text-secondary);
stroke-width: 5;
stroke-linecap: round;
stroke-linejoin: round;
@ -1399,13 +1399,13 @@ button:disabled {
}
.toggle-row input:checked + .fancy-check .fancy-path {
stroke: var(--claude-accent);
stroke: var(--accent);
stroke-dasharray: 70.5096664428711 9999999;
stroke-dashoffset: -262.2723388671875;
}
.toggle-row span {
color: var(--claude-text);
color: var(--text-primary);
font-weight: 600;
}

View File

@ -10,8 +10,8 @@ body {
min-height: 100vh;
font-family:
-apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', sans-serif;
background: var(--claude-bg);
color: var(--claude-text);
background: var(--surface-base);
color: var(--text-primary);
}
.auth-page {
@ -42,7 +42,7 @@ body {
margin-top: 8px;
margin-bottom: 0;
font-size: 0.9rem;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.auth-form-group {
@ -53,7 +53,7 @@ body {
display: block;
margin-bottom: 6px;
font-size: 0.86rem;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.auth-input {
@ -63,7 +63,7 @@ body {
border-radius: 12px;
border: 1px solid var(--theme-control-border);
background: var(--theme-surface-strong);
color: var(--claude-text);
color: var(--text-primary);
padding: 11px 12px;
font-size: 0.95rem;
transition:
@ -73,8 +73,8 @@ body {
.auth-input:focus {
outline: none;
border-color: var(--claude-accent-strong);
box-shadow: 0 0 0 3px var(--claude-highlight);
border-color: var(--accent-strong);
box-shadow: 0 0 0 3px var(--highlight);
}
.auth-button {
@ -85,7 +85,7 @@ body {
min-height: 44px;
font-size: 0.95rem;
cursor: pointer;
background: linear-gradient(135deg, var(--claude-accent), var(--claude-accent-strong));
background: linear-gradient(135deg, var(--accent), var(--accent-strong));
color: var(--on-accent);
transition:
transform 0.15s ease,
@ -108,9 +108,9 @@ body {
margin-top: 10px;
border-radius: 999px;
min-height: 42px;
border: 1px solid var(--claude-accent-strong);
border: 1px solid var(--accent-strong);
background: var(--theme-surface-strong);
color: var(--claude-accent-strong);
color: var(--accent-strong);
cursor: pointer;
}
@ -124,10 +124,10 @@ body {
.auth-link {
margin-top: 16px;
font-size: 0.86rem;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.auth-link a {
color: var(--claude-accent-strong);
color: var(--accent-strong);
text-decoration: none;
}

View File

@ -1071,13 +1071,13 @@ onBeforeUnmount(() => {
}
.summary-line-text:hover {
background-color: var(--claude-panel);
background-color: var(--surface-panel);
}
.summary-content-wrapper {
min-width: 0;
font-size: 15px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
line-height: 1.7;
padding: 0;
position: relative;
@ -1173,7 +1173,7 @@ onBeforeUnmount(() => {
}
.check-icon {
color: var(--claude-text-tertiary);
color: var(--text-tertiary);
width: 18px;
height: 18px;
}
@ -1181,17 +1181,17 @@ onBeforeUnmount(() => {
/* 运行中文本:按字符依次闪烁 */
.summary-line-text.running .summary-char {
display: inline-block;
color: var(--claude-text-secondary);
color: var(--text-secondary);
animation: summaryPass 2s ease-in-out infinite;
}
@keyframes summaryPass {
0%,
100% {
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
50% {
color: var(--claude-accent);
color: var(--accent);
}
}
@ -1266,13 +1266,13 @@ onBeforeUnmount(() => {
.step-icon {
flex-shrink: 0;
color: var(--claude-text-tertiary); /* 和竖线、字体一样的灰色 */
color: var(--text-tertiary); /* 和竖线、字体一样的灰色 */
}
.step-line {
width: 2px;
flex: 1; /* 自动填充剩余空间 */
background: var(--claude-border);
background: var(--border-default);
margin-top: 4px;
margin-bottom: -14px; /* 延伸到下一个 step-item保持上下距离 SVG 相等 */
flex-shrink: 0;
@ -1292,7 +1292,7 @@ onBeforeUnmount(() => {
.step-header {
font-size: 12px;
font-weight: 600;
color: var(--claude-text-tertiary);
color: var(--text-tertiary);
text-transform: uppercase;
letter-spacing: 0.5px;
margin-bottom: 8px;
@ -1300,13 +1300,13 @@ onBeforeUnmount(() => {
.step-body {
font-size: 14px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
line-height: 1.7;
}
/* 思考内容 */
.thinking-content {
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 14px;
line-height: 1.7;
white-space: pre-wrap;
@ -1320,7 +1320,7 @@ onBeforeUnmount(() => {
margin-top: calc((1em - 1.7em) / 2);
/* 滚动条样式(参考 git 状态侧边栏文件列表,滚动槽透明贴合灰色底色) */
scrollbar-width: thin; /* Firefox */
scrollbar-color: color-mix(in srgb, var(--claude-text-secondary) 55%, transparent) transparent;
scrollbar-color: color-mix(in srgb, var(--text-secondary) 55%, transparent) transparent;
}
.thinking-content::-webkit-scrollbar {
@ -1335,7 +1335,7 @@ onBeforeUnmount(() => {
}
.thinking-content::-webkit-scrollbar-thumb {
background: color-mix(in srgb, var(--claude-text-secondary) 55%, transparent);
background: color-mix(in srgb, var(--text-secondary) 55%, transparent);
border-radius: 999px;
border: 2px solid transparent;
background-clip: padding-box;
@ -1345,7 +1345,7 @@ onBeforeUnmount(() => {
.step-header {
font-size: 12px;
font-weight: 600;
color: var(--claude-text-tertiary);
color: var(--text-tertiary);
text-transform: uppercase;
letter-spacing: 0.5px;
margin: 0 0 8px 0;
@ -1354,7 +1354,7 @@ onBeforeUnmount(() => {
}
.tool-intent {
font-weight: 500;
color: var(--claude-text);
color: var(--text-primary);
margin-bottom: 12px;
font-size: 14px;
line-height: 1.7;
@ -1363,8 +1363,8 @@ onBeforeUnmount(() => {
}
.tool-result {
background: var(--claude-panel);
border: 1px solid var(--claude-border);
background: var(--surface-panel);
border: 1px solid var(--border-default);
border-radius: 8px;
padding: 12px;
font-size: 13px;
@ -1395,12 +1395,12 @@ onBeforeUnmount(() => {
word-wrap: break-word;
font-family: 'SF Mono', 'Monaco', 'Consolas', monospace;
font-size: 12px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.result-item {
padding: 8px 0;
border-bottom: 1px solid var(--claude-border);
border-bottom: 1px solid var(--border-default);
}
.result-item:last-child {
@ -1422,7 +1422,7 @@ onBeforeUnmount(() => {
.text-content {
font-size: 15px;
line-height: 1.7;
color: var(--claude-text);
color: var(--text-primary);
word-wrap: break-word;
}
</style>

View File

@ -1646,7 +1646,7 @@ function renderListActiveSubAgents(result: any): string {
.code-block pre,
.output-block pre {
scrollbar-width: thin; /* Firefox */
scrollbar-color: color-mix(in srgb, var(--claude-text-secondary) 55%, transparent) transparent;
scrollbar-color: color-mix(in srgb, var(--text-secondary) 55%, transparent) transparent;
}
.tool-result-content.scrollable::-webkit-scrollbar,
@ -1670,7 +1670,7 @@ function renderListActiveSubAgents(result: any): string {
.tool-result-diff.scrollable::-webkit-scrollbar-thumb,
.code-block pre::-webkit-scrollbar-thumb,
.output-block pre::-webkit-scrollbar-thumb {
background: color-mix(in srgb, var(--claude-text-secondary) 55%, transparent);
background: color-mix(in srgb, var(--text-secondary) 55%, transparent);
border-radius: 999px;
border: 2px solid transparent;
background-clip: padding-box;
@ -1771,13 +1771,13 @@ function renderListActiveSubAgents(result: any): string {
}
.diff-line-number {
color: var(--claude-text-tertiary);
color: var(--text-tertiary);
text-align: right;
user-select: none;
}
.diff-marker {
color: var(--claude-text-secondary);
color: var(--text-secondary);
text-align: center;
user-select: none;
}
@ -1800,7 +1800,7 @@ function renderListActiveSubAgents(result: any): string {
.diff-separator {
text-align: left;
color: var(--claude-text-tertiary);
color: var(--text-tertiary);
margin: 8px 0;
}

View File

@ -28,7 +28,7 @@
width: var(--square-size);
height: var(--square-size);
left: 15%;
background-color: var(--claude-text-tertiary);
background-color: var(--text-tertiary);
transform-origin: 50%;
animation: bounce-square 0.5s alternate infinite ease;
}

View File

@ -25,7 +25,7 @@
position: absolute;
width: 3px;
height: 3px;
background: var(--claude-text-tertiary);
background: var(--text-tertiary);
will-change: transform;
}

View File

@ -42,7 +42,7 @@
content: '';
width: 3px;
height: 3px;
background: var(--claude-text-tertiary);
background: var(--text-tertiary);
transform: scale(0);
opacity: 0.5;
animation: pulse calc(var(--speed) * 1.111) ease-in-out infinite;

View File

@ -24,7 +24,7 @@
top: 50%;
animation: chase-up 2.4s cubic-bezier(0, 0, 0.24, 1.21) infinite;
left: 50%;
background: var(--claude-text-tertiary);
background: var(--text-tertiary);
}
.dual-chase-loader::after {

View File

@ -23,7 +23,7 @@
.five-squares-loader div {
display: inline-block;
background: var(--claude-text-tertiary);
background: var(--text-tertiary);
width: var(--square);
height: var(--square);
position: absolute;

View File

@ -25,7 +25,7 @@
position: absolute;
left: 50%;
margin-left: -1px;
background: var(--claude-text-tertiary);
background: var(--text-tertiary);
animation: follow-track 1.25s infinite;
}

View File

@ -26,7 +26,7 @@
left: 50%;
margin-top: -1.5px;
margin-left: -1.5px;
background: var(--claude-text-tertiary);
background: var(--text-tertiary);
animation: corner-cycle 1.8s ease-in-out infinite;
}

View File

@ -22,7 +22,7 @@
.sq {
width: 3px;
height: 3px;
background: var(--claude-text-tertiary);
background: var(--text-tertiary);
animation: jump 2s ease infinite;
}

View File

@ -38,7 +38,7 @@
content: '';
width: 3px;
height: 3px;
background: var(--claude-text-tertiary);
background: var(--text-tertiary);
}
.dot:nth-child(2) {

View File

@ -36,7 +36,7 @@
top: 75%;
width: 3px;
height: 3px;
background: var(--claude-text-tertiary);
background: var(--text-tertiary);
}
.dot:first-child {

View File

@ -38,7 +38,7 @@
top: 0;
width: 100%;
height: 100%;
background: var(--claude-text-tertiary);
background: var(--text-tertiary);
}
.box:nth-child(3n) {

View File

@ -38,7 +38,7 @@
left: 0;
width: var(--size-orbe);
height: var(--size-orbe);
background: var(--claude-text-tertiary);
background: var(--text-tertiary);
filter: blur(0.35px);
}

View File

@ -60,7 +60,7 @@
.cell:nth-child(7),
.cell:nth-child(8),
.cell:nth-child(9) {
--cell-color: var(--claude-text-tertiary);
--cell-color: var(--text-tertiary);
}
@keyframes ripple {

View File

@ -100,7 +100,7 @@
width: 3px;
height: 3px;
margin: 0.5px;
background: var(--claude-text-tertiary);
background: var(--text-tertiary);
animation: square-animation 10s ease-in-out infinite both;
}

View File

@ -13,7 +13,7 @@
height: var(--sq);
position: relative;
left: -10px;
color: var(--claude-text-tertiary);
color: var(--text-tertiary);
animation: roll 2s linear infinite;
}

View File

@ -34,7 +34,7 @@
}
.square {
background: var(--claude-text-tertiary);
background: var(--text-tertiary);
width: 3px;
height: 3px;
position: absolute;

View File

@ -25,7 +25,7 @@
.sq {
width: 3px;
height: 3px;
background: var(--claude-text-tertiary);
background: var(--text-tertiary);
animation: wave var(--speed) ease-in-out infinite;
}

View File

@ -980,9 +980,9 @@
align-items: center;
justify-content: center;
padding: 0;
/* 线条色与左侧对话记录侧边栏导航图标一致--claude-text恒定不变
/* 线条色与左侧对话记录侧边栏导航图标一致--text-primary恒定不变
hover 变色展开is-active状态也不变色 */
color: var(--claude-text);
color: var(--text-primary);
/* 底色与背后面板一致(收起=对话标题栏 / 展开=应用背景,两者同为 --surface-panel */
background: var(--surface-panel);
border: none;

View File

@ -129,7 +129,7 @@ defineExpose(publicApi);
max-height: calc(
((var(--file-at-row-height) * 7) + (var(--file-at-gap) * 8) + (var(--file-at-pad-y) * 2)) * 1.5
);
border: 1px solid var(--claude-border);
border: 1px solid var(--border-default);
border-radius: var(--file-at-radius);
background: var(--surface-soft);
box-shadow: 0 8px 24px var(--shadow-color);
@ -165,7 +165,7 @@ defineExpose(publicApi);
border-radius: 7px;
padding: 3px 9px;
background: transparent;
color: var(--claude-text);
color: var(--text-primary);
text-align: left;
cursor: pointer;
}
@ -184,7 +184,7 @@ defineExpose(publicApi);
.file-at-item__name {
flex: 0 1 auto;
min-width: 0;
color: var(--claude-text);
color: var(--text-primary);
font-size: 12px;
font-weight: 500;
white-space: nowrap;
@ -195,7 +195,7 @@ defineExpose(publicApi);
.file-at-item__description {
flex: 1 1 auto;
min-width: 0;
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 12px;
white-space: nowrap;
overflow: hidden;
@ -209,13 +209,13 @@ defineExpose(publicApi);
display: flex;
align-items: center;
padding: 3px 9px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 11px;
}
body[data-theme='dark'] .file-at-menu-wrapper {
background: var(--badge-bg);
border-color: var(--claude-border);
border-color: var(--border-default);
}
.file-at-menu-motion-enter-active,

View File

@ -2987,7 +2987,7 @@ onBeforeUnmount(() => {
width: 45px;
height: 45px;
pointer-events: auto;
color: var(--claude-text);
color: var(--text-primary);
}
.floating-status-row {
@ -3018,7 +3018,7 @@ onBeforeUnmount(() => {
justify-content: space-between;
gap: 12px;
padding: 4px 10px 4px 4px;
border: 1px solid var(--claude-border);
border: 1px solid var(--border-default);
border-radius: 14px;
background: var(--theme-surface-soft);
box-shadow: none;
@ -3037,7 +3037,7 @@ onBeforeUnmount(() => {
font-size: 14px;
font-weight: 500;
line-height: 16px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
background: var(--chat-surface-color);
padding: 2px 8px;
border-radius: 9999px;
@ -3107,7 +3107,7 @@ onBeforeUnmount(() => {
border: none;
border-radius: 10px;
background: transparent;
color: var(--claude-text);
color: var(--text-primary);
font: inherit;
font-size: 12px;
line-height: 1.2;
@ -3139,12 +3139,12 @@ onBeforeUnmount(() => {
}
.floating-project-status__button--branch {
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.floating-project-status__notice {
padding: 0 8px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.floating-project-status__notice--button {
@ -3221,7 +3221,7 @@ onBeforeUnmount(() => {
flex-direction: column;
gap: 2px;
padding: 6px;
border: 1px solid var(--claude-border);
border: 1px solid var(--border-default);
border-radius: 14px;
background: var(--theme-surface-soft);
box-shadow: none;
@ -3236,7 +3236,7 @@ onBeforeUnmount(() => {
border: none;
border-radius: 10px;
background: transparent;
color: var(--claude-text);
color: var(--text-primary);
font-size: 14px;
line-height: 1.2;
text-align: left;
@ -3299,8 +3299,8 @@ onBeforeUnmount(() => {
border-radius: 999px;
font-size: 12px;
line-height: 1.4;
color: var(--claude-text-secondary);
background: color-mix(in srgb, var(--theme-surface-soft) 92%, var(--claude-text-tertiary) 8%);
color: var(--text-secondary);
background: color-mix(in srgb, var(--theme-surface-soft) 92%, var(--text-tertiary) 8%);
border: 1px solid var(--theme-chip-border);
user-select: none;
transition:
@ -3333,32 +3333,32 @@ onBeforeUnmount(() => {
opacity: 0;
}
.goal-mode-banner--running {
color: var(--claude-accent);
border-color: var(--claude-accent);
background: color-mix(in srgb, var(--theme-surface-soft) 82%, var(--claude-accent) 18%);
color: var(--accent);
border-color: var(--accent);
background: color-mix(in srgb, var(--theme-surface-soft) 82%, var(--accent) 18%);
}
.goal-mode-banner--done {
color: var(--claude-success);
border-color: var(--claude-success);
background: color-mix(in srgb, var(--theme-surface-soft) 82%, var(--claude-success) 18%);
color: var(--state-success);
border-color: var(--state-success);
background: color-mix(in srgb, var(--theme-surface-soft) 82%, var(--state-success) 18%);
}
:global(:root[data-theme='dark']) .goal-mode-banner,
:global(body[data-theme='dark']) .goal-mode-banner {
color: var(--claude-text-secondary);
background: color-mix(in srgb, var(--theme-surface-muted) 82%, var(--claude-text-tertiary) 18%);
color: var(--text-secondary);
background: color-mix(in srgb, var(--theme-surface-muted) 82%, var(--text-tertiary) 18%);
border-color: var(--theme-control-border-strong);
}
:global(:root[data-theme='dark']) .goal-mode-banner--running,
:global(body[data-theme='dark']) .goal-mode-banner--running {
color: var(--text-primary);
background: color-mix(in srgb, var(--theme-surface-muted) 72%, var(--claude-accent) 28%);
border-color: color-mix(in srgb, var(--claude-accent) 70%, white 30%);
background: color-mix(in srgb, var(--theme-surface-muted) 72%, var(--accent) 28%);
border-color: color-mix(in srgb, var(--accent) 70%, white 30%);
}
:global(:root[data-theme='dark']) .goal-mode-banner--done,
:global(body[data-theme='dark']) .goal-mode-banner--done {
color: color-mix(in srgb, var(--state-success) 30%, white);
background: color-mix(in srgb, var(--theme-surface-muted) 72%, var(--claude-success) 28%);
border-color: color-mix(in srgb, var(--claude-success) 70%, white 30%);
background: color-mix(in srgb, var(--theme-surface-muted) 72%, var(--state-success) 28%);
border-color: color-mix(in srgb, var(--state-success) 70%, white 30%);
}
.goal-mode-banner--clickable {
cursor: pointer;
@ -3367,14 +3367,14 @@ onBeforeUnmount(() => {
width: 7px;
height: 7px;
border-radius: 50%;
background: var(--claude-text-tertiary);
background: var(--text-tertiary);
}
.goal-mode-banner--running .goal-mode-banner__dot {
background: var(--claude-accent);
background: var(--accent);
animation: goal-banner-pulse 1.4s ease-in-out infinite;
}
.goal-mode-banner--done .goal-mode-banner__dot {
background: var(--claude-success);
background: var(--state-success);
}
@keyframes goal-banner-pulse {
0%,

View File

@ -292,17 +292,17 @@ const goalCompleted = computed(() => String(props.goalProgress?.status || '').to
margin-top: 2px;
}
.menu-entry.goal-entry-active {
color: var(--claude-accent);
color: var(--accent);
}
.menu-entry.goal-entry-active .entry-arrow {
color: var(--claude-accent);
color: var(--accent);
font-size: 12px;
}
.menu-entry.mode-entry-active {
color: var(--claude-accent);
color: var(--accent);
}
.menu-entry.mode-entry-active .entry-arrow {
color: var(--claude-accent);
color: var(--accent);
font-size: 12px;
}
</style>

View File

@ -192,8 +192,8 @@ const formatUpdatedAt = (value: string | number) => {
max-width: 96vw;
height: min(700px, 88vh);
max-height: 88vh;
background: var(--claude-panel);
border: 1px solid var(--claude-border);
background: var(--surface-panel);
border: 1px solid var(--border-default);
border-radius: 16px;
box-shadow: var(--theme-shadow-strong);
display: flex;
@ -210,7 +210,7 @@ const formatUpdatedAt = (value: string | number) => {
align-items: center;
justify-content: space-between;
gap: 12px;
border-bottom: 1px solid var(--claude-border);
border-bottom: 1px solid var(--border-default);
}
.header-titles {
@ -221,14 +221,14 @@ const formatUpdatedAt = (value: string | number) => {
font-size: 16px;
font-weight: 700;
line-height: 1.2;
color: var(--claude-text);
color: var(--text-primary);
letter-spacing: -0.01em;
}
.review-header .subtitle {
font-size: 12px;
line-height: 1.2;
color: var(--claude-text-secondary);
color: var(--text-secondary);
margin-top: 4px;
}
@ -245,7 +245,7 @@ const formatUpdatedAt = (value: string | number) => {
display: inline-flex;
align-items: center;
font-size: 12px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
padding: 0 10px;
border-radius: 8px;
background: var(--theme-tab-active);
@ -265,7 +265,7 @@ const formatUpdatedAt = (value: string | number) => {
border: 0;
border-radius: 9px;
background: transparent;
color: var(--claude-text-secondary);
color: var(--text-secondary);
cursor: pointer;
transition:
background 140ms ease,
@ -274,7 +274,7 @@ const formatUpdatedAt = (value: string | number) => {
.icon-close-btn:hover:not(:disabled) {
background: var(--theme-tab-active);
color: var(--claude-text);
color: var(--text-primary);
}
.icon-close-btn:disabled {
@ -291,7 +291,7 @@ const formatUpdatedAt = (value: string | number) => {
}
.review-left {
border-right: 1px solid var(--claude-border);
border-right: 1px solid var(--border-default);
display: flex;
flex-direction: column;
min-height: 0;
@ -316,12 +316,12 @@ const formatUpdatedAt = (value: string | number) => {
.pane-head-label {
font-size: 13px;
font-weight: 600;
color: var(--claude-text);
color: var(--text-primary);
}
.pane-head-meta {
font-size: 12px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
/* ===== 通用滚动容器:隐藏滚动条,无边框盒子 ===== */
@ -387,7 +387,7 @@ const formatUpdatedAt = (value: string | number) => {
bottom: 14px;
width: 3px;
border-radius: 999px;
background: var(--claude-text-secondary);
background: var(--text-secondary);
}
.conversation-item .row {
@ -395,7 +395,7 @@ const formatUpdatedAt = (value: string | number) => {
align-items: center;
gap: 8px;
font-weight: 600;
color: var(--claude-text);
color: var(--text-primary);
}
.conversation-item .item-title {
@ -419,13 +419,13 @@ const formatUpdatedAt = (value: string | number) => {
font-size: 12px;
line-height: 1;
background: var(--theme-chip-bg);
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.conversation-item .meta {
font-size: 12px;
line-height: 1;
color: var(--claude-text-secondary);
color: var(--text-secondary);
display: flex;
gap: 10px;
white-space: nowrap;
@ -435,7 +435,7 @@ const formatUpdatedAt = (value: string | number) => {
.empty {
text-align: center;
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 13px;
padding: 20px 0;
}
@ -453,7 +453,7 @@ const formatUpdatedAt = (value: string | number) => {
border-radius: 10px;
padding: 0 12px;
background: transparent;
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 13px;
text-align: left;
cursor: pointer;
@ -464,7 +464,7 @@ const formatUpdatedAt = (value: string | number) => {
.load-more-btn:hover:not(:disabled) {
background: var(--theme-tab-active);
color: var(--claude-text);
color: var(--text-primary);
}
.load-more-btn:disabled {
@ -483,7 +483,7 @@ const formatUpdatedAt = (value: string | number) => {
gap: 1px;
font-family: Menlo, Consolas, 'SFMono-Regular', monospace;
font-size: 13px;
color: var(--claude-text);
color: var(--text-primary);
white-space: pre-wrap;
word-break: break-word;
}
@ -503,7 +503,7 @@ const formatUpdatedAt = (value: string | number) => {
height: 100%;
min-height: 220px;
text-align: center;
color: var(--claude-text-secondary);
color: var(--text-secondary);
display: flex;
flex-direction: column;
gap: 10px;
@ -513,23 +513,23 @@ const formatUpdatedAt = (value: string | number) => {
}
.placeholder-icon {
color: var(--claude-text-tertiary);
color: var(--text-tertiary);
opacity: 0.9;
}
.text-main {
font-weight: 600;
font-size: 14px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.text-sub {
font-size: 12px;
color: var(--claude-text-tertiary);
color: var(--text-tertiary);
}
.placeholder.error .text-main {
color: var(--claude-warning);
color: var(--state-warning);
}
/* ===== 底部操作栏 ===== */
@ -541,7 +541,7 @@ const formatUpdatedAt = (value: string | number) => {
align-items: center;
justify-content: space-between;
gap: 14px;
border-top: 1px solid var(--claude-border);
border-top: 1px solid var(--border-default);
}
/* 自定义开关(非原生 checkbox 外观),固定高度 */
@ -551,7 +551,7 @@ const formatUpdatedAt = (value: string | number) => {
gap: 10px;
height: 38px;
font-size: 14px;
color: var(--claude-text);
color: var(--text-primary);
cursor: pointer;
user-select: none;
}
@ -586,7 +586,7 @@ const formatUpdatedAt = (value: string | number) => {
}
.toggle-send input:checked + .switch {
background: var(--claude-accent-strong);
background: var(--accent-strong);
}
.toggle-send input:checked + .switch::after {
@ -607,7 +607,7 @@ const formatUpdatedAt = (value: string | number) => {
font-size: 14px;
font-weight: 600;
cursor: pointer;
background: var(--claude-accent);
background: var(--accent);
color: var(--on-accent);
transition:
background 140ms ease,
@ -615,7 +615,7 @@ const formatUpdatedAt = (value: string | number) => {
}
.primary-btn:hover:not(:disabled) {
background: var(--claude-button-hover);
background: var(--accent-hover);
}
.primary-btn:disabled,
@ -636,7 +636,7 @@ const formatUpdatedAt = (value: string | number) => {
}
.review-left {
border-right: none;
border-bottom: 1px solid var(--claude-border);
border-bottom: 1px solid var(--border-default);
}
}
</style>

View File

@ -168,51 +168,51 @@ const stoppedReasonLabel = computed(() => {
padding: 2px 10px;
border-radius: 999px;
border: 1px solid var(--theme-chip-border);
background: color-mix(in srgb, var(--theme-surface-soft) 92%, var(--claude-text-tertiary) 8%);
color: var(--claude-text-secondary);
background: color-mix(in srgb, var(--theme-surface-soft) 92%, var(--text-tertiary) 8%);
color: var(--text-secondary);
}
.goal-progress-status.is-running {
color: var(--claude-accent);
border-color: var(--claude-accent);
background: color-mix(in srgb, var(--theme-surface-soft) 82%, var(--claude-accent) 18%);
color: var(--accent);
border-color: var(--accent);
background: color-mix(in srgb, var(--theme-surface-soft) 82%, var(--accent) 18%);
}
.goal-progress-status.is-done {
color: var(--claude-success);
border-color: var(--claude-success);
background: color-mix(in srgb, var(--theme-surface-soft) 82%, var(--claude-success) 18%);
color: var(--state-success);
border-color: var(--state-success);
background: color-mix(in srgb, var(--theme-surface-soft) 82%, var(--state-success) 18%);
}
.goal-progress-status.is-stopped {
color: var(--claude-warning);
border-color: var(--claude-warning);
background: color-mix(in srgb, var(--theme-surface-soft) 82%, var(--claude-warning) 18%);
color: var(--state-warning);
border-color: var(--state-warning);
background: color-mix(in srgb, var(--theme-surface-soft) 82%, var(--state-warning) 18%);
}
:global(:root[data-theme='dark']) .goal-progress-status,
:global(body[data-theme='dark']) .goal-progress-status {
color: var(--claude-text-secondary);
background: color-mix(in srgb, var(--theme-surface-muted) 82%, var(--claude-text-tertiary) 18%);
color: var(--text-secondary);
background: color-mix(in srgb, var(--theme-surface-muted) 82%, var(--text-tertiary) 18%);
border-color: var(--theme-control-border-strong);
}
:global(:root[data-theme='dark']) .goal-progress-status.is-running,
:global(body[data-theme='dark']) .goal-progress-status.is-running {
color: var(--text-primary);
background: color-mix(in srgb, var(--theme-surface-muted) 72%, var(--claude-accent) 28%);
border-color: color-mix(in srgb, var(--claude-accent) 70%, white 30%);
background: color-mix(in srgb, var(--theme-surface-muted) 72%, var(--accent) 28%);
border-color: color-mix(in srgb, var(--accent) 70%, white 30%);
}
:global(:root[data-theme='dark']) .goal-progress-status.is-done,
:global(body[data-theme='dark']) .goal-progress-status.is-done {
color: color-mix(in srgb, var(--state-success) 30%, white);
background: color-mix(in srgb, var(--theme-surface-muted) 72%, var(--claude-success) 28%);
border-color: color-mix(in srgb, var(--claude-success) 70%, white 30%);
background: color-mix(in srgb, var(--theme-surface-muted) 72%, var(--state-success) 28%);
border-color: color-mix(in srgb, var(--state-success) 70%, white 30%);
}
:global(:root[data-theme='dark']) .goal-progress-status.is-stopped,
:global(body[data-theme='dark']) .goal-progress-status.is-stopped {
color: color-mix(in srgb, var(--state-warning) 30%, white);
background: color-mix(in srgb, var(--theme-surface-muted) 72%, var(--claude-warning) 28%);
border-color: color-mix(in srgb, var(--claude-warning) 70%, white 30%);
background: color-mix(in srgb, var(--theme-surface-muted) 72%, var(--state-warning) 28%);
border-color: color-mix(in srgb, var(--state-warning) 70%, white 30%);
}
.goal-progress-goal {
font-size: 13px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
@ -234,16 +234,16 @@ const stoppedReasonLabel = computed(() => {
.goal-metric__value {
font-size: 18px;
font-weight: 600;
color: var(--claude-text);
color: var(--text-primary);
}
.goal-metric__label {
margin-top: 4px;
font-size: 11px;
color: var(--claude-text-tertiary);
color: var(--text-tertiary);
}
.goal-progress-reason {
font-size: 13px;
color: var(--claude-warning);
color: var(--state-warning);
margin-bottom: 10px;
}
.goal-progress-summary {
@ -252,13 +252,13 @@ const stoppedReasonLabel = computed(() => {
}
.goal-progress-summary__title {
font-size: 12px;
color: var(--claude-text-tertiary);
color: var(--text-tertiary);
margin-bottom: 6px;
}
.goal-progress-summary__body {
font-size: 13px;
line-height: 1.6;
color: var(--claude-text);
color: var(--text-primary);
white-space: pre-wrap;
word-break: break-word;
max-height: 240px;

View File

@ -100,13 +100,13 @@ button {
.primary {
border: none;
background: linear-gradient(135deg, var(--claude-accent), var(--claude-accent-strong));
background: linear-gradient(135deg, var(--accent), var(--accent-strong));
color: var(--on-accent);
}
.ghost {
background: var(--theme-surface-soft);
color: var(--claude-text);
color: var(--text-primary);
}
button:hover:not(:disabled) {

View File

@ -66,7 +66,7 @@ defineEmits<{
.overlay-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; }
.overlay-header h3 { margin: 0; font-size: 16px; }
.overlay-header button { border: none; background: transparent; font-size: 20px; cursor: pointer; }
.hint { font-size: 12px; color: var(--claude-text-secondary); margin: 0 0 8px 0; }
.hint { font-size: 12px; color: var(--text-secondary); margin: 0 0 8px 0; }
.mode-switch { display: inline-flex; border: 1px solid var(--theme-control-border); border-radius: 10px; overflow: hidden; margin-bottom: 8px; }
.mode-btn { border: none; background: transparent; padding: 6px 10px; cursor: pointer; font-size: 12px; }
.mode-btn.active { background: var(--theme-tab-active); font-weight: 600; }

View File

@ -164,7 +164,7 @@ function submit() {
max-height: min(520px, calc(100vh - 36px));
display: flex;
flex-direction: column;
color: var(--claude-text);
color: var(--text-primary);
background: var(--theme-surface-card);
border: 1px solid var(--theme-control-border);
border-radius: 20px;
@ -178,7 +178,7 @@ function submit() {
grid-template-columns: 56px 1fr 56px;
align-items: center;
border-bottom: 1px solid var(--theme-control-border);
background: color-mix(in srgb, var(--theme-surface-soft) 92%, var(--claude-left-rail) 8%);
background: color-mix(in srgb, var(--theme-surface-soft) 92%, var(--surface-rail) 8%);
}
.user-question-traffic {
@ -203,7 +203,7 @@ function submit() {
text-align: center;
font-size: 13px;
font-weight: 600;
color: var(--claude-text-secondary);
color: var(--text-secondary);
user-select: none;
}
@ -226,7 +226,7 @@ function submit() {
}
.user-question-kicker {
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 12px;
}
@ -257,7 +257,7 @@ function submit() {
border-radius: 6px;
border: 1px solid var(--theme-control-border);
background: transparent;
color: var(--claude-text-secondary);
color: var(--text-secondary);
cursor: pointer;
display: grid;
place-items: center;
@ -271,7 +271,7 @@ function submit() {
.user-question-nav button:hover:not(:disabled) {
background: var(--hover-bg);
color: var(--claude-text);
color: var(--text-primary);
}
.user-question-nav button:disabled {
@ -298,7 +298,7 @@ function submit() {
.user-question-context {
margin: 0;
color: var(--claude-text-secondary);
color: var(--text-secondary);
line-height: 1.6;
font-size: 13px;
white-space: pre-wrap;
@ -315,7 +315,7 @@ function submit() {
border: 1px solid var(--theme-control-border);
border-radius: 12px;
background: transparent;
color: var(--claude-text);
color: var(--text-primary);
padding: 9px 11px;
text-align: left;
cursor: pointer;
@ -339,7 +339,7 @@ function submit() {
}
.user-question-option__desc {
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 12px;
line-height: 1.42;
white-space: pre-wrap;
@ -364,7 +364,7 @@ function submit() {
border: 1px solid var(--theme-control-border);
border-radius: 12px;
padding: 10px 11px;
color: var(--claude-text);
color: var(--text-primary);
background: var(--theme-surface-soft);
outline: none;
font: inherit;
@ -388,7 +388,7 @@ function submit() {
gap: 12px;
padding: 0 18px;
border-top: 1px solid var(--theme-control-border);
background: color-mix(in srgb, var(--theme-surface-soft) 92%, var(--claude-left-rail) 8%);
background: color-mix(in srgb, var(--theme-surface-soft) 92%, var(--surface-rail) 8%);
}
.user-question-spacer {
@ -412,22 +412,22 @@ function submit() {
.user-question-btn.ghost {
background: transparent;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.user-question-btn.ghost:hover {
background: var(--hover-bg);
color: var(--claude-text);
color: var(--text-primary);
}
.user-question-btn.primary {
background: var(--claude-accent);
border-color: var(--claude-accent-strong);
background: var(--accent);
border-color: var(--accent-strong);
color: var(--on-accent);
}
.user-question-btn.primary:hover:not(:disabled) {
background: var(--claude-button-hover);
background: var(--accent-hover);
}
.user-question-btn:disabled {

View File

@ -253,12 +253,12 @@ const splitDiffContent = (content: any): string[] => {
max-height: 88vh;
overflow: hidden;
border-radius: 16px;
background: var(--claude-panel);
border: 1px solid var(--claude-border);
background: var(--surface-panel);
border: 1px solid var(--border-default);
box-shadow: var(--theme-shadow-strong);
display: flex;
flex-direction: column;
color: var(--claude-text);
color: var(--text-primary);
}
/* ===== 头部:固定高度,靠分隔线 ===== */
@ -266,7 +266,7 @@ const splitDiffContent = (content: any): string[] => {
flex: 0 0 auto;
height: 60px;
padding: 0 18px;
border-bottom: 1px solid var(--claude-border);
border-bottom: 1px solid var(--border-default);
display: flex;
align-items: center;
justify-content: space-between;
@ -334,7 +334,7 @@ const splitDiffContent = (content: any): string[] => {
}
.switch-line input:checked + .switch {
background: var(--claude-accent-strong);
background: var(--accent-strong);
}
.switch-line input:checked + .switch::after {
@ -355,7 +355,7 @@ const splitDiffContent = (content: any): string[] => {
align-items: center;
gap: 8px;
font-size: 13px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.scope-label {
@ -372,10 +372,10 @@ const splitDiffContent = (content: any): string[] => {
align-items: center;
gap: 8px;
padding: 0 10px;
border: 1px solid var(--claude-border);
border: 1px solid var(--border-default);
border-radius: 9px;
background: transparent;
color: var(--claude-text);
color: var(--text-primary);
font-size: 13px;
cursor: pointer;
transition:
@ -412,8 +412,8 @@ const splitDiffContent = (content: any): string[] => {
left: 1px;
width: 6px;
height: 6px;
border-right: 1.5px solid var(--claude-text-secondary);
border-bottom: 1.5px solid var(--claude-text-secondary);
border-right: 1.5px solid var(--text-secondary);
border-bottom: 1.5px solid var(--text-secondary);
transform: rotate(45deg);
transition: transform 160ms ease;
}
@ -431,7 +431,7 @@ const splitDiffContent = (content: any): string[] => {
width: max-content;
z-index: 20;
padding: 6px;
border: 1px solid var(--claude-border);
border: 1px solid var(--border-default);
border-radius: 12px;
background: var(--theme-surface-strong);
box-shadow: var(--theme-shadow-soft);
@ -450,7 +450,7 @@ const splitDiffContent = (content: any): string[] => {
border: 0;
border-radius: 9px;
background: transparent;
color: var(--claude-text);
color: var(--text-primary);
font-size: 13px;
text-align: left;
cursor: pointer;
@ -470,7 +470,7 @@ const splitDiffContent = (content: any): string[] => {
.scope-option-check {
flex: 0 0 auto;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
/* ===== 头部按钮 ===== */
@ -480,10 +480,10 @@ const splitDiffContent = (content: any): string[] => {
align-items: center;
gap: 6px;
padding: 0 12px;
border: 1px solid var(--claude-border);
border: 1px solid var(--border-default);
border-radius: 9px;
background: transparent;
color: var(--claude-text);
color: var(--text-primary);
font-size: 13px;
cursor: pointer;
transition: background 140ms ease;
@ -506,7 +506,7 @@ const splitDiffContent = (content: any): string[] => {
border: 0;
border-radius: 9px;
background: transparent;
color: var(--claude-text-secondary);
color: var(--text-secondary);
cursor: pointer;
transition:
background 140ms ease,
@ -515,7 +515,7 @@ const splitDiffContent = (content: any): string[] => {
.icon-close-btn:hover {
background: var(--theme-tab-active);
color: var(--claude-text);
color: var(--text-primary);
}
/* ===== 主体:左右分栏靠竖线 ===== */
@ -540,7 +540,7 @@ const splitDiffContent = (content: any): string[] => {
}
.checkpoint-list {
border-right: 1px solid var(--claude-border);
border-right: 1px solid var(--border-default);
padding: 6px 8px;
display: flex;
flex-direction: column;
@ -558,7 +558,7 @@ const splitDiffContent = (content: any): string[] => {
border-radius: 10px;
padding: 0 12px;
background: transparent;
color: var(--claude-text);
color: var(--text-primary);
cursor: pointer;
overflow: hidden;
display: flex;
@ -585,7 +585,7 @@ const splitDiffContent = (content: any): string[] => {
bottom: 16px;
width: 3px;
border-radius: 999px;
background: var(--claude-text-secondary);
background: var(--text-secondary);
}
.row {
@ -597,18 +597,18 @@ const splitDiffContent = (content: any): string[] => {
.row.top {
font-size: 12px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.seq {
font-weight: 700;
color: var(--claude-text);
color: var(--text-primary);
}
.preview {
font-size: 13px;
line-height: 1.3;
color: var(--claude-text);
color: var(--text-primary);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
@ -628,7 +628,7 @@ const splitDiffContent = (content: any): string[] => {
}
.files {
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.checkpoint-detail {
@ -664,7 +664,7 @@ const splitDiffContent = (content: any): string[] => {
gap: 10px;
align-items: center;
min-height: 40px;
border-bottom: 1px solid var(--claude-border);
border-bottom: 1px solid var(--border-default);
padding: 0 4px;
font-size: 13px;
cursor: pointer;
@ -682,12 +682,12 @@ const splitDiffContent = (content: any): string[] => {
.status {
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.path {
word-break: break-all;
color: var(--claude-text);
color: var(--text-primary);
}
.delta {
@ -697,7 +697,7 @@ const splitDiffContent = (content: any): string[] => {
.loading,
.empty {
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 13px;
padding: 12px 4px;
}
@ -707,7 +707,7 @@ const splitDiffContent = (content: any): string[] => {
flex: 0 0 auto;
min-height: 60px;
padding: 12px 18px;
border-top: 1px solid var(--claude-border);
border-top: 1px solid var(--border-default);
display: flex;
align-items: center;
gap: 16px;
@ -729,7 +729,7 @@ const splitDiffContent = (content: any): string[] => {
.restore-option-label {
font-size: 13px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
white-space: nowrap;
}
@ -742,10 +742,10 @@ const splitDiffContent = (content: any): string[] => {
.restore-option-btn {
height: 32px;
padding: 0 12px;
border: 1px solid var(--claude-border);
border: 1px solid var(--border-default);
border-radius: 9px;
background: transparent;
color: var(--claude-text);
color: var(--text-primary);
font-size: 13px;
cursor: pointer;
white-space: nowrap;
@ -760,8 +760,8 @@ const splitDiffContent = (content: any): string[] => {
}
.restore-option-btn.active {
border-color: var(--claude-accent);
background: var(--claude-accent);
border-color: var(--accent);
background: var(--accent);
color: var(--on-accent);
}
@ -782,14 +782,14 @@ const splitDiffContent = (content: any): string[] => {
padding: 0 18px;
font-size: 14px;
font-weight: 600;
background: var(--claude-accent);
background: var(--accent);
color: var(--on-accent);
cursor: pointer;
transition: background 140ms ease;
}
.confirm-btn:hover:not(:disabled) {
background: var(--claude-button-hover);
background: var(--accent-hover);
}
.confirm-btn:disabled {
@ -810,7 +810,7 @@ const splitDiffContent = (content: any): string[] => {
.tool-result-diff.scroll-area {
max-height: calc(8 * 1.5em + 16px);
border: 1px solid var(--claude-border);
border: 1px solid var(--border-default);
border-radius: 8px;
padding: 8px;
background: var(--theme-surface-soft);
@ -829,7 +829,7 @@ const splitDiffContent = (content: any): string[] => {
}
.diff-marker {
color: var(--claude-text-secondary);
color: var(--text-secondary);
text-align: center;
user-select: none;
}
@ -853,13 +853,13 @@ const splitDiffContent = (content: any): string[] => {
.diff-context {
background: transparent;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.approval-note {
padding: 6px 8px;
font-size: 11px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
@media (max-width: 860px) {
@ -869,7 +869,7 @@ const splitDiffContent = (content: any): string[] => {
}
.checkpoint-list {
border-right: none;
border-bottom: 1px solid var(--claude-border);
border-bottom: 1px solid var(--border-default);
}
}
</style>

View File

@ -560,7 +560,7 @@ onBeforeUnmount(() => {
.terminal-panel__close:hover {
background: var(--theme-tab-active);
color: var(--claude-text);
color: var(--text-primary);
box-shadow: 0 1px 2px var(--shadow-color);
}

View File

@ -290,26 +290,26 @@ const parseFinalMessage = (text: string) => {
.tool-approval-panel.is-goal-approval-mode .auto-approval-block {
background: var(--theme-surface-card);
border-color: var(--theme-control-border);
color: var(--claude-text);
color: var(--text-primary);
}
.tool-approval-panel.is-goal-approval-mode .auto-approval-block__content,
.tool-approval-panel.is-goal-approval-mode .auto-approval-block__reason {
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.tool-approval-panel.is-goal-approval-mode .auto-approval-block__decision {
color: var(--claude-text);
color: var(--text-primary);
}
:global(:root[data-theme='dark']) .auto-approval-block,
:global(body[data-theme='dark']) .auto-approval-block {
background: color-mix(in srgb, var(--theme-surface-muted) 86%, white 4%);
border-color: var(--theme-control-border-strong);
color: var(--claude-text);
color: var(--text-primary);
}
:global(:root[data-theme='dark']) .auto-approval-block__content,
:global(body[data-theme='dark']) .auto-approval-block__content {
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
</style>

View File

@ -1740,7 +1740,7 @@
key="sub-agents"
class="settings-page"
>
<div class="settings-section-desc" style="margin: 0 0 16px; color: var(--claude-text-secondary); font-size: 13px; line-height: 1.6">
<div class="settings-section-desc" style="margin: 0 0 16px; color: var(--text-secondary); font-size: 13px; line-height: 1.6">
管理多智能体模式下的子智能体角色预设角色可编辑创建自定义覆盖自定义角色可创建/编辑/删除
</div>
@ -3212,7 +3212,7 @@ const applyThemeOption = async (theme: ThemeKey) => {
.sub-agent-role-name {
font-size: 14px;
font-weight: 550;
color: var(--claude-text);
color: var(--text-primary);
display: flex;
align-items: center;
gap: 6px;
@ -3224,22 +3224,22 @@ const applyThemeOption = async (theme: ThemeKey) => {
font-weight: 400;
}
.sub-agent-role-tag.tag-preset {
background: color-mix(in srgb, var(--claude-text-secondary) 15%, transparent);
color: var(--claude-text-secondary);
background: color-mix(in srgb, var(--text-secondary) 15%, transparent);
color: var(--text-secondary);
}
.sub-agent-role-tag.tag-custom {
background: color-mix(in srgb, var(--claude-accent) 15%, transparent);
color: var(--claude-accent);
background: color-mix(in srgb, var(--accent) 15%, transparent);
color: var(--accent);
}
.sub-agent-role-desc {
font-size: 12.5px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
margin-top: 3px;
line-height: 1.38;
}
.sub-agent-role-meta {
font-size: 11px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
opacity: 0.7;
margin-top: 2px;
}
@ -3274,7 +3274,7 @@ const applyThemeOption = async (theme: ThemeKey) => {
.role-editor-header h2 {
font-size: 20px;
font-weight: 600;
color: var(--claude-text);
color: var(--text-primary);
margin: 0;
}
.role-editor-body {
@ -3301,10 +3301,10 @@ const applyThemeOption = async (theme: ThemeKey) => {
.settings-section-title {
font-size: 14px;
font-weight: 550;
color: var(--claude-text);
color: var(--text-primary);
}
.settings-empty-hint {
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 13px;
padding: 24px 0;
text-align: center;
@ -3345,7 +3345,7 @@ const applyThemeOption = async (theme: ThemeKey) => {
border: 0;
border-radius: 50%;
background: transparent;
color: var(--claude-text);
color: var(--text-primary);
display: grid;
place-items: center;
cursor: pointer;
@ -3399,7 +3399,7 @@ const applyThemeOption = async (theme: ThemeKey) => {
border: 0;
border-radius: 12px;
background: transparent;
color: var(--claude-text);
color: var(--text-primary);
padding: 0 13px;
display: flex;
align-items: center;
@ -3458,7 +3458,7 @@ const applyThemeOption = async (theme: ThemeKey) => {
.settings-redesign-content-header h2 {
margin: 0;
color: var(--claude-text);
color: var(--text-primary);
font-size: 28px;
line-height: 1;
letter-spacing: -0.045em;
@ -3515,7 +3515,7 @@ const applyThemeOption = async (theme: ThemeKey) => {
align-items: center;
gap: 18px;
padding: 11px 0;
color: var(--claude-text);
color: var(--text-primary);
}
.settings-list-row.tall,
@ -3534,7 +3534,7 @@ const applyThemeOption = async (theme: ThemeKey) => {
.settings-row-title {
display: block;
color: var(--claude-text);
color: var(--text-primary);
font-size: 14px;
font-weight: 550;
letter-spacing: -0.01em;
@ -3544,7 +3544,7 @@ const applyThemeOption = async (theme: ThemeKey) => {
.settings-row-desc {
display: block;
margin-top: 3px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 12.5px;
line-height: 1.38;
}
@ -3562,7 +3562,7 @@ const applyThemeOption = async (theme: ThemeKey) => {
border: 0;
border-radius: 12px;
background: transparent;
color: var(--claude-text);
color: var(--text-primary);
display: inline-flex;
align-items: center;
justify-content: center;
@ -3648,7 +3648,7 @@ const applyThemeOption = async (theme: ThemeKey) => {
border: 0;
border-radius: 12px;
background: transparent;
color: var(--claude-text);
color: var(--text-primary);
display: grid;
grid-template-columns: minmax(0, 1fr) 22px;
row-gap: 0;
@ -3672,7 +3672,7 @@ const applyThemeOption = async (theme: ThemeKey) => {
grid-column: 1;
grid-row: 1;
display: block;
color: var(--claude-text);
color: var(--text-primary);
font-size: 15px;
font-weight: 550;
letter-spacing: -0.01em;
@ -3684,7 +3684,7 @@ const applyThemeOption = async (theme: ThemeKey) => {
grid-row: 2;
display: block;
margin-top: 0;
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 11px;
line-height: 1.15;
min-width: 0;
@ -3701,7 +3701,7 @@ const applyThemeOption = async (theme: ThemeKey) => {
width: 21px;
height: 21px;
fill: none;
stroke: var(--claude-text);
stroke: var(--text-primary);
stroke-width: 2.25;
stroke-linecap: round;
stroke-linejoin: round;
@ -3721,7 +3721,7 @@ const applyThemeOption = async (theme: ThemeKey) => {
border: 1px solid var(--theme-control-border);
border-radius: 12px;
background: transparent;
color: var(--claude-text);
color: var(--text-primary);
padding: 0 12px;
outline: none;
font-size: 13px;
@ -3740,7 +3740,7 @@ const applyThemeOption = async (theme: ThemeKey) => {
.settings-section-divider__label {
font-size: 12px;
font-weight: 600;
color: var(--claude-text-secondary);
color: var(--text-secondary);
letter-spacing: 0.04em;
}
.settings-section-divider::after {
@ -3761,7 +3761,7 @@ const applyThemeOption = async (theme: ThemeKey) => {
.settings-number-row input:focus,
.settings-number-input:focus,
.settings-compression-grid input:focus {
border-color: var(--claude-text-secondary);
border-color: var(--text-secondary);
box-shadow: none;
}
@ -3798,7 +3798,7 @@ const applyThemeOption = async (theme: ThemeKey) => {
border: 1px solid var(--theme-control-border);
border-radius: 999px;
background: transparent;
color: var(--claude-text);
color: var(--text-primary);
min-height: 32px;
padding: 0 12px;
font-size: 12px;
@ -3814,13 +3814,13 @@ const applyThemeOption = async (theme: ThemeKey) => {
.settings-chip-row button.active,
.settings-primary-button {
border-color: var(--claude-accent);
background: var(--claude-accent);
border-color: var(--accent);
background: var(--accent);
color: var(--on-accent);
}
.settings-secondary-button.danger {
color: var(--claude-warning);
color: var(--state-warning);
}
.settings-inline-actions {
@ -3836,12 +3836,12 @@ const applyThemeOption = async (theme: ThemeKey) => {
}
.settings-mini-status {
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 12px;
}
.settings-mini-status.warning {
color: var(--claude-warning);
color: var(--state-warning);
}
.settings-add-row,
@ -3865,7 +3865,7 @@ const applyThemeOption = async (theme: ThemeKey) => {
flex-direction: column;
gap: 10px;
padding: 14px 0;
color: var(--claude-text);
color: var(--text-primary);
}
.settings-textarea-row textarea {
@ -3875,7 +3875,7 @@ const applyThemeOption = async (theme: ThemeKey) => {
border: 1px solid var(--theme-control-border);
border-radius: 12px;
background: transparent;
color: var(--claude-text);
color: var(--text-primary);
padding: 12px;
outline: none;
font-size: 13px;
@ -3886,12 +3886,12 @@ const applyThemeOption = async (theme: ThemeKey) => {
}
.settings-textarea-row textarea:focus {
border-color: var(--claude-text-secondary);
border-color: var(--text-secondary);
box-shadow: none;
}
.settings-textarea-row textarea::placeholder {
color: var(--claude-text-secondary);
color: var(--text-secondary);
opacity: 0.6;
}
@ -3926,7 +3926,7 @@ const applyThemeOption = async (theme: ThemeKey) => {
.fancy-path {
fill: none;
stroke: var(--claude-text-secondary);
stroke: var(--text-secondary);
stroke-width: 5;
stroke-linecap: round;
stroke-linejoin: round;
@ -3939,7 +3939,7 @@ const applyThemeOption = async (theme: ThemeKey) => {
}
.settings-toggle-row input:checked + .fancy-check .fancy-path {
stroke: var(--claude-text-secondary);
stroke: var(--text-secondary);
stroke-dasharray: 70.5096664428711 9999999;
stroke-dashoffset: -262.2723388671875;
}
@ -3975,7 +3975,7 @@ const applyThemeOption = async (theme: ThemeKey) => {
.settings-compression-grid label {
display: grid;
gap: 5px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 12px;
}
@ -4003,12 +4003,12 @@ const applyThemeOption = async (theme: ThemeKey) => {
}
.status.success {
color: var(--claude-success);
color: var(--state-success);
}
.status.error,
.usage-summary-error {
color: var(--claude-warning);
color: var(--state-warning);
}
.usage-summary-page {
@ -4035,7 +4035,7 @@ const applyThemeOption = async (theme: ThemeKey) => {
.usage-summary-eyebrow {
margin: 0;
font-size: 11px;
color: var(--claude-accent-strong);
color: var(--accent-strong);
letter-spacing: 0.16em;
text-transform: uppercase;
}
@ -4044,7 +4044,7 @@ const applyThemeOption = async (theme: ThemeKey) => {
.usage-summary-note,
.usage-summary-meta {
margin: 0;
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 12px;
}
@ -4070,22 +4070,22 @@ const applyThemeOption = async (theme: ThemeKey) => {
.usage-summary-item .label {
font-size: 12px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.usage-summary-item .value {
margin-top: 4px;
font-size: 20px;
font-weight: 600;
color: var(--claude-text);
color: var(--text-primary);
}
.usage-summary-item .value--success {
color: var(--claude-success);
color: var(--state-success);
}
.usage-summary-item .value--warning {
color: var(--claude-warning);
color: var(--state-warning);
}
.usage-summary-meta {
@ -4101,7 +4101,7 @@ const applyThemeOption = async (theme: ThemeKey) => {
border-radius: 999px;
padding: 7px 14px;
background: transparent;
color: var(--claude-text);
color: var(--text-primary);
font-size: 12px;
cursor: pointer;
}

View File

@ -7,8 +7,8 @@ body {
body {
font-family: 'Iowan Old Style', ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;
background: var(--claude-bg);
color: var(--claude-text);
background: var(--surface-base);
color: var(--text-primary);
overflow: hidden;
-webkit-font-smoothing: antialiased;
}
@ -21,8 +21,8 @@ select {
}
body[data-theme='dark'] {
background: var(--claude-bg);
color: var(--claude-text);
background: var(--surface-base);
color: var(--text-primary);
}
/* Remove iOS/Android WebView default tap highlight */

View File

@ -47,37 +47,16 @@
--effort-dot-uncovered: rgba(0, 0, 0, 0.28);
/* === 兼容别名(旧 token 名 → 新语义 token迁移完成后删除 === */
--claude-bg: var(--surface-base);
--claude-panel: var(--surface-panel);
--claude-left-rail: var(--surface-rail);
--claude-sidebar: var(--surface-sidebar);
--theme-surface-card: var(--surface-card);
--theme-surface-strong: var(--surface-raised);
--theme-surface-soft: var(--surface-soft);
--theme-surface-muted: var(--surface-muted);
--claude-text: var(--text-primary);
--claude-text-secondary: var(--text-secondary);
--claude-text-tertiary: var(--text-tertiary);
--claude-muted: var(--text-muted);
--claude-border: var(--border-default);
--claude-border-strong: var(--border-strong);
--theme-card-border-strong: var(--border-card-strong);
--theme-chip-border: var(--chip-border);
--claude-accent: var(--accent);
--claude-accent-strong: var(--accent-strong);
--claude-button-hover: var(--accent-hover);
--claude-button-active: var(--accent-active);
--claude-deep: var(--accent-deep);
--claude-deep-strong: var(--accent-deep-strong);
--claude-success: var(--state-success);
--claude-warning: var(--state-warning);
--claude-danger: var(--state-danger);
--claude-highlight: var(--highlight);
--theme-tab-active: var(--tab-active);
--theme-chip-bg: var(--chip-bg);
--theme-badge-bg: var(--badge-bg);
--theme-switch-track: var(--switch-track);
--claude-shadow: var(--shadow-card);
--theme-shadow-soft: var(--shadow-soft);
--theme-shadow-mid: var(--shadow-mid);
--theme-shadow-strong: var(--shadow-strong);
@ -93,7 +72,7 @@
:root[data-theme='classic'] {
color-scheme: light;
/* Surface 表面层级 —— Claude 亮色暖奶油盘canvas<soft<card<cream-strongraised纯白浮起 */
/* Surface 表面层级 —— 亮色暖奶油盘canvas<soft<card<cream-strongraised纯白浮起 */
--effort-track-bg: var(--surface-muted);
--surface-base: #faf9f5;
--surface-panel: #faf9f5;
@ -103,17 +82,17 @@
--surface-raised: #ffffff;
--surface-soft: #f5f0e8;
--surface-muted: #e8e0d2;
/* Text 文字 —— Claude */
/* Text 文字 */
--text-primary: #141413;
--text-secondary: #3d3d3a;
--text-tertiary: #6c6a64;
--text-muted: rgba(108, 106, 100, 0.55);
/* Border 边框 —— Claude hairline */
/* Border 边框 —— hairline */
--border-default: #e6dfd8;
--border-strong: #d8cfc4;
--border-card-strong: #e6dfd8;
--chip-border: #ebe6df;
/* Accent 强调 —— Claude primary克制 CTA-only */
/* Accent 强调 —— primary克制 CTA-only */
--accent: #cc785c;
--accent-strong: #a9583e;
--accent-hover: #bd6a4f;
@ -121,7 +100,7 @@
--accent-deep: #6c6a64;
--accent-deep-strong: #3d3d3a;
--on-accent: #ffffff;
/* State 状态 —— Claude semantic */
/* State 状态 —— semantic */
--state-success: #10b981;
--state-warning: #f59e0b;
--state-danger: #dc2626;
@ -281,7 +260,7 @@
/* 首屏JS 设置 data-theme 之前)回退到 classic 取值 */
:root:not([data-theme]) {
--effort-track-bg: var(--surface-muted);
/* Surface 表面层级 —— 同 classicClaude 亮色暖奶油盘) */
/* Surface 表面层级 —— 同 classic亮色暖奶油盘) */
--surface-base: #faf9f5;
--surface-panel: #faf9f5;
--surface-rail: #f5f0e8;

View File

@ -619,7 +619,7 @@
width: 36px;
height: 36px;
border-radius: 50%;
border: 1px solid var(--claude-border);
border: 1px solid var(--border-default);
background: var(--surface-soft);
display: flex;
align-items: center;
@ -635,21 +635,21 @@
}
.scroll-lock-toggle.locked .scroll-lock-btn {
border-color: var(--claude-accent);
border-color: var(--accent);
box-shadow: none;
}
.scroll-lock-btn svg {
width: 18px;
height: 18px;
stroke: var(--claude-text);
stroke: var(--text-primary);
stroke-width: 1.8;
fill: none;
transition: stroke 0.2s ease;
}
.scroll-lock-toggle.locked .scroll-lock-btn svg {
stroke: var(--claude-accent);
stroke: var(--accent);
}
.message-block {
@ -731,7 +731,7 @@
margin: 14px 0 6px;
font-weight: 600;
line-height: 1.3;
color: var(--claude-text);
color: var(--text-primary);
}
.user-message.user-message--multi-agent .bubble-text h1 {
@ -779,27 +779,27 @@
.user-message.user-message--multi-agent .bubble-text blockquote {
margin: 10px 0;
padding: 4px 12px;
border-left: 3px solid var(--claude-border);
color: var(--claude-text-secondary);
border-left: 3px solid var(--border-default);
color: var(--text-secondary);
}
.user-message.user-message--multi-agent .bubble-text hr {
margin: 14px 0;
border: none;
border-top: 1px solid var(--claude-border);
border-top: 1px solid var(--border-default);
}
/* 代码/表格底色基于气泡色 chip-bg 派生,避免与气泡背景融为一体 */
.user-message.user-message--multi-agent .bubble-text code {
font-family: 'JetBrains Mono', 'SF Mono', 'Fira Code', 'Consolas', 'Menlo', 'Monaco', 'Courier New', monospace;
background: color-mix(in srgb, var(--claude-text) 7%, var(--chip-bg));
background: color-mix(in srgb, var(--text-primary) 7%, var(--chip-bg));
padding: 2px 5px;
border-radius: 4px;
font-size: 0.9em;
}
.user-message.user-message--multi-agent .bubble-text pre {
background: color-mix(in srgb, var(--claude-text) 5%, var(--chip-bg));
background: color-mix(in srgb, var(--text-primary) 5%, var(--chip-bg));
padding: 10px 12px;
border-radius: 8px;
overflow-x: auto;
@ -826,9 +826,9 @@
margin: 10px 0;
overflow-x: auto;
overflow-y: hidden;
border: 1px solid var(--claude-border);
border: 1px solid var(--border-default);
border-radius: 8px;
background: color-mix(in srgb, var(--claude-text) 4%, var(--chip-bg));
background: color-mix(in srgb, var(--text-primary) 4%, var(--chip-bg));
}
.user-message.user-message--multi-agent .bubble-text .md-table-scroll > table,
@ -838,7 +838,7 @@
.user-message.user-message--multi-agent .bubble-text th,
.user-message.user-message--multi-agent .bubble-text td {
border: 1px solid var(--claude-border);
border: 1px solid var(--border-default);
padding: 6px 10px;
text-align: left;
vertical-align: middle;
@ -847,7 +847,7 @@
.user-message.user-message--multi-agent .bubble-text th {
font-weight: 600;
background: color-mix(in srgb, var(--claude-text) 7%, var(--chip-bg));
background: color-mix(in srgb, var(--text-primary) 7%, var(--chip-bg));
}
.message-block--last
@ -894,7 +894,7 @@
.assistant-message .message-header {
font-size: 14px;
font-weight: 600;
color: var(--claude-text);
color: var(--text-primary);
margin-bottom: 10px;
letter-spacing: 0.02em;
}
@ -903,13 +903,13 @@
margin-left: 8px;
font-size: 12px;
font-weight: 500;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.assistant-generating-placeholder {
display: inline-flex;
align-items: center;
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 14px;
font-weight: 500;
letter-spacing: 0.05em;
@ -945,7 +945,7 @@
font-size: 15px;
line-height: 1.6;
box-shadow: none;
color: var(--claude-text);
color: var(--text-primary);
white-space: pre-wrap;
word-break: break-all;
overflow-wrap: normal;
@ -967,7 +967,7 @@
padding: 10px 14px;
border-radius: 14px;
font-size: 13px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
background: var(--theme-surface-card);
border: 1px solid var(--theme-control-border);
}
@ -984,7 +984,7 @@
gap: 14px;
width: 100%;
margin: 2px auto;
color: var(--claude-text-secondary);
color: var(--text-secondary);
user-select: none;
}
@ -1094,14 +1094,14 @@
transform: none;
pointer-events: auto;
background: transparent;
color: var(--claude-text-tertiary);
color: var(--text-tertiary);
border-radius: 4px;
transition: color 140ms ease;
}
.user-bubble-expand-row .user-bubble-expand-btn:hover {
background: transparent;
color: var(--claude-text);
color: var(--text-primary);
}
.user-bubble-actions {
@ -1122,7 +1122,7 @@
.user-bubble-time {
font-size: 12px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
margin-left: auto;
padding-left: 8px;
line-height: 20px;
@ -1143,7 +1143,7 @@
border-radius: 6px;
padding: 0;
background: transparent;
color: var(--claude-text-secondary);
color: var(--text-secondary);
cursor: pointer;
display: inline-flex;
align-items: center;
@ -1156,7 +1156,7 @@
.user-bubble-action-btn:hover {
background-color: var(--theme-tab-active);
color: var(--claude-text);
color: var(--text-primary);
}
.user-bubble-action-btn::before {
@ -1195,8 +1195,8 @@
}
.assistant-message .message-text {
background: var(--claude-highlight);
border-left: 4px solid var(--claude-accent);
background: var(--highlight);
border-left: 4px solid var(--accent);
}
.user-message .message-text.user-bubble-text .image-inline-row {
@ -1237,7 +1237,7 @@
margin: 0;
font-size: 15px;
font-weight: 600;
color: var(--claude-text);
color: var(--text-primary);
letter-spacing: 0.08em;
background: transparent;
border: none;
@ -1273,7 +1273,7 @@
font-family: 'SF Mono', 'Monaco', 'Consolas', monospace;
font-size: 13px;
line-height: 1.6;
color: var(--claude-text-secondary);
color: var(--text-secondary);
scrollbar-width: none;
}
@ -1286,7 +1286,7 @@
border-radius: 12px;
margin-bottom: 12px;
overflow: hidden;
border: 1px solid var(--claude-border);
border: 1px solid var(--border-default);
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
box-shadow: none;
}
@ -1307,7 +1307,7 @@
}
.collapsible-header:hover {
background: var(--claude-highlight);
background: var(--highlight);
}
/* 深色模式下块 hover 对齐对话列表 hover 颜色 */
@ -1330,7 +1330,7 @@ body[data-theme='dark'] .collapsible-header:hover {
mask-position: center;
-webkit-mask-position: center;
transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
/* 移除旧的 ::before 箭头 */
@ -1357,7 +1357,7 @@ body[data-theme='dark'] .collapsible-header:hover {
align-items: center;
gap: 6px;
font-size: 14px;
color: var(--claude-text);
color: var(--text-primary);
}
.collapsible-content {
@ -1402,7 +1402,7 @@ body[data-theme='dark'] .collapsible-header:hover {
padding: 13px 13px 13px 37px;
font-size: 13px;
line-height: 1.6;
color: var(--claude-text-secondary);
color: var(--text-secondary);
scrollbar-width: none;
}
@ -1438,9 +1438,9 @@ body[data-theme='dark'] .collapsible-header:hover {
.stacked-shell {
position: relative;
border: 1px solid var(--claude-border);
border: 1px solid var(--border-default);
border-radius: 16px;
background: var(--claude-card);
background: var(--surface-card);
box-shadow: none;
overflow: hidden;
min-height: 0;
@ -1458,7 +1458,7 @@ body[data-theme='dark'] .collapsible-header:hover {
}
.stacked-item {
border-bottom: 1px solid var(--claude-border);
border-bottom: 1px solid var(--border-default);
}
.stacked-item:last-child {
@ -1481,8 +1481,8 @@ body[data-theme='dark'] .collapsible-header:hover {
.stacked-more-block {
position: absolute;
inset: 0 0 auto 0;
background: var(--claude-card);
border-bottom: 0 solid var(--claude-border);
background: var(--surface-card);
border-bottom: 0 solid var(--border-default);
display: flex;
align-items: center;
gap: 10px;
@ -1526,11 +1526,11 @@ body[data-theme='dark'] .more-icon {
.more-title {
font-weight: 700;
color: var(--claude-text);
color: var(--text-primary);
}
.more-desc {
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 12px;
}
@ -1578,7 +1578,7 @@ body[data-theme='dark'] .more-icon {
bottom: 0;
left: 0;
height: 2px;
background: var(--claude-accent);
background: var(--accent);
animation: progress-bar 2s ease-in-out infinite;
opacity: 0;
transition: opacity 0.3s ease;
@ -1606,18 +1606,18 @@ body[data-theme='dark'] .more-icon {
.status-text {
font-size: 14px;
color: var(--claude-text);
color: var(--text-primary);
font-weight: 500;
white-space: nowrap;
flex-shrink: 0;
}
.collapsible-block.processing .status-text {
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.tool-desc {
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 12px;
margin-left: 8px;
white-space: nowrap;
@ -1651,7 +1651,7 @@ body[data-theme='dark'] .more-icon {
.text-output {
margin: 16px 0;
color: var(--claude-text);
color: var(--text-primary);
font-size: 15px;
line-height: 1.7;
}
@ -1660,7 +1660,7 @@ body[data-theme='dark'] .more-icon {
display: block;
max-width: 100%;
margin: 14px auto;
border: 1px solid var(--claude-border);
border: 1px solid var(--border-default);
border-radius: 12px;
overflow: hidden;
background: transparent;
@ -1683,18 +1683,18 @@ body[data-theme='dark'] .more-icon {
.chat-inline-card__pending-tip {
font-size: 13px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.chat-inline-card__error {
font-size: 12px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
text-align: center;
}
.chat-inline-card__caption {
font-size: 12px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
text-align: center;
line-height: 1.4;
padding: 0 8px;
@ -1718,16 +1718,16 @@ body[data-theme='dark'] .more-icon {
max-height: 720px;
object-fit: contain;
border-radius: 12px;
border: 1px solid var(--claude-border);
border: 1px solid var(--border-default);
box-shadow: none;
background: var(--claude-card);
background: var(--surface-card);
}
.chat-inline-card--error {
border: 1px dashed var(--claude-accent);
border: 1px dashed var(--accent);
padding: 6px 10px;
border-radius: 12px;
background: var(--claude-highlight);
background: var(--highlight);
}
.chat-inline-card--html {
@ -1751,9 +1751,9 @@ body[data-theme='dark'] .more-icon {
width: 26px;
height: 26px;
border-radius: 999px;
border: 1px solid var(--claude-border);
background: color-mix(in srgb, var(--claude-card) 78%, transparent);
color: var(--claude-text-secondary);
border: 1px solid var(--border-default);
background: color-mix(in srgb, var(--surface-card) 78%, transparent);
color: var(--text-secondary);
display: inline-flex;
align-items: center;
justify-content: center;
@ -1767,9 +1767,9 @@ body[data-theme='dark'] .more-icon {
}
.chat-inline-card__refresh-btn:hover {
color: var(--claude-text);
border-color: var(--claude-accent);
background: color-mix(in srgb, var(--claude-highlight) 72%, transparent);
color: var(--text-primary);
border-color: var(--accent);
background: color-mix(in srgb, var(--highlight) 72%, transparent);
}
.chat-inline-card__refresh-btn.is-refreshing {
@ -1795,7 +1795,7 @@ body[data-theme='dark'] .more-icon {
.chat-inline-html__pending-tip {
font-size: 13px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.chat-inline-html__iframe {
@ -1824,7 +1824,7 @@ show-html:not([data-rendered='1']) {
margin: 14px auto;
box-sizing: border-box;
overflow: hidden;
border: 1px solid var(--claude-border);
border: 1px solid var(--border-default);
border-radius: 12px;
background: transparent;
box-shadow: none;
@ -1926,7 +1926,7 @@ show-html:not([data-rendered='1'])[ratio='3:4'] {
overflow-x: auto;
overflow-y: hidden;
-webkit-overflow-scrolling: touch;
border: 1px solid var(--claude-border);
border: 1px solid var(--border-default);
border-radius: 12px;
background: var(--theme-surface-soft);
box-shadow: none;
@ -1951,13 +1951,13 @@ show-html:not([data-rendered='1'])[ratio='3:4'] {
.text-output .text-content .md-table-scroll::-webkit-scrollbar-thumb,
.text-output .text-content [data-md-table-scroll='1']::-webkit-scrollbar-thumb {
background: color-mix(in srgb, var(--claude-text-secondary) 55%, transparent);
background: color-mix(in srgb, var(--text-secondary) 55%, transparent);
border-radius: 999px;
}
.text-output .text-content .md-table-scroll,
.text-output .text-content [data-md-table-scroll='1'] {
scrollbar-color: color-mix(in srgb, var(--claude-text-secondary) 55%, transparent)
scrollbar-color: color-mix(in srgb, var(--text-secondary) 55%, transparent)
color-mix(in srgb, var(--theme-surface-muted) 70%, transparent);
scrollbar-width: thin;
}
@ -1968,7 +1968,7 @@ show-html:not([data-rendered='1'])[ratio='3:4'] {
.text-output .text-content th,
.text-output .text-content td {
border: 1px solid var(--claude-border);
border: 1px solid var(--border-default);
padding: 10px 14px;
text-align: left;
vertical-align: middle;
@ -1977,13 +1977,13 @@ show-html:not([data-rendered='1'])[ratio='3:4'] {
.text-output .text-content th {
font-weight: 600;
color: var(--claude-text);
color: var(--text-primary);
}
.text-output .text-content hr {
margin: 32px calc(var(--chat-content-x) * -1);
border: none;
border-top: 1px solid var(--claude-border);
border-top: 1px solid var(--border-default);
}
.system-action {
@ -1992,7 +1992,7 @@ show-html:not([data-rendered='1'])[ratio='3:4'] {
border-radius: 8px;
background: linear-gradient(135deg, color-mix(in srgb, var(--state-info) 8%, transparent), color-mix(in srgb, var(--state-info) 8%, transparent));
border-left: 4px solid var(--state-info);
color: var(--claude-text);
color: var(--text-primary);
font-size: 14px;
line-height: 1.5;
}
@ -2008,7 +2008,7 @@ show-html:not([data-rendered='1'])[ratio='3:4'] {
margin: 0;
font-size: 15px;
line-height: 1.7;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.append-block,
@ -2017,12 +2017,12 @@ show-html:not([data-rendered='1'])[ratio='3:4'] {
padding: 12px 16px;
border-radius: 10px;
background: var(--theme-surface-soft);
border-left: 4px solid var(--claude-accent);
border-left: 4px solid var(--accent);
box-shadow: none;
display: flex;
flex-direction: column;
gap: 8px;
color: var(--claude-text);
color: var(--text-primary);
}
.append-block.append-error,
@ -2039,7 +2039,7 @@ show-html:not([data-rendered='1'])[ratio='3:4'] {
}
.code-block-wrapper {
border: 1px solid var(--claude-border);
border: 1px solid var(--border-default);
border-radius: 20px;
overflow: hidden;
margin: 16px 0;
@ -2059,11 +2059,11 @@ show-html:not([data-rendered='1'])[ratio='3:4'] {
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 1px solid var(--claude-border);
border-bottom: 1px solid var(--border-default);
}
.code-language {
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 14px;
line-height: 1;
letter-spacing: -0.01em;
@ -2078,7 +2078,7 @@ show-html:not([data-rendered='1'])[ratio='3:4'] {
padding: 0;
border-radius: 10px;
background-color: transparent;
color: var(--claude-text-secondary);
color: var(--text-secondary);
cursor: pointer;
opacity: 0.9;
transition:
@ -2100,7 +2100,7 @@ show-html:not([data-rendered='1'])[ratio='3:4'] {
.copy-code-btn:hover {
background-color: var(--theme-tab-active);
color: var(--claude-text);
color: var(--text-primary);
}
.copy-code-btn.copied::before {
@ -2138,7 +2138,7 @@ show-html:not([data-rendered='1'])[ratio='3:4'] {
padding: 0 !important;
border: 0 !important;
box-shadow: none !important;
color: var(--claude-text);
color: var(--text-primary);
font-family:
'JetBrains Mono', 'SF Mono', 'Fira Code', 'Consolas', 'Menlo', 'Monaco', 'Courier New',
monospace !important;
@ -2171,7 +2171,7 @@ show-html:not([data-rendered='1'])[ratio='3:4'] {
.cursor-blink {
animation: blink 1s steps(1) infinite;
color: var(--claude-accent);
color: var(--accent);
}
@keyframes blink {
@ -2211,7 +2211,7 @@ a.md-download-link {
overflow-y: hidden;
text-align: center;
scrollbar-width: thin;
scrollbar-color: color-mix(in srgb, var(--claude-text-secondary) 55%, transparent) transparent;
scrollbar-color: color-mix(in srgb, var(--text-secondary) 55%, transparent) transparent;
&::-webkit-scrollbar {
height: 6px;
@ -2222,7 +2222,7 @@ a.md-download-link {
}
&::-webkit-scrollbar-thumb {
background: color-mix(in srgb, var(--claude-text-secondary) 55%, transparent);
background: color-mix(in srgb, var(--text-secondary) 55%, transparent);
border-radius: 999px;
}

View File

@ -19,16 +19,16 @@
align-items: center;
gap: 16px;
padding: 48px 64px;
border: 2px dashed var(--claude-accent);
border: 2px dashed var(--accent);
border-radius: 16px;
background: var(--claude-highlight);
background: var(--highlight);
animation: drag-pulse 1.5s ease-in-out infinite;
}
.drag-upload-icon {
width: 64px;
height: 64px;
color: var(--claude-accent);
color: var(--accent);
svg {
width: 100%;
@ -39,12 +39,12 @@
.drag-upload-text {
font-size: 20px;
font-weight: 600;
color: var(--claude-text);
color: var(--text-primary);
}
.drag-upload-hint {
font-size: 14px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
// 动画 - 使用主题色的脉冲效果颜色走 --pulse-ring随主题自动适配
@ -71,16 +71,16 @@
// 浅色主题(light) - 使用黑色强调
:root[data-theme='light'] {
.drag-upload-content {
border-color: var(--claude-text);
background: var(--claude-highlight);
border-color: var(--text-primary);
background: var(--highlight);
}
.drag-upload-icon {
color: var(--claude-text);
color: var(--text-primary);
}
.drag-upload-hint {
color: var(--claude-text);
color: var(--text-primary);
}
}
@ -88,18 +88,18 @@
:root[data-theme='classic'],
:root:not([data-theme]) {
.drag-upload-hint {
color: var(--claude-text);
color: var(--text-primary);
}
}
// 深色主题(dark) - 使用白色强调
:root[data-theme='dark'] {
.drag-upload-content {
border-color: var(--claude-text);
background: var(--claude-highlight);
border-color: var(--text-primary);
background: var(--highlight);
}
.drag-upload-icon {
color: var(--claude-text);
color: var(--text-primary);
}
}

View File

@ -86,7 +86,7 @@
display: block;
font-size: 13px;
line-height: 1.3;
color: var(--claude-text);
color: var(--text-primary);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
@ -96,7 +96,7 @@
flex-shrink: 0;
border: none;
background: transparent;
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 12px;
line-height: 1.2;
padding: 3px 4px;
@ -108,7 +108,7 @@
.runtime-queue-item__action:hover {
background: var(--theme-chip-bg);
color: var(--claude-text);
color: var(--text-primary);
}
.runtime-queue-item__action--danger:hover {
@ -147,7 +147,7 @@
(var(--skill-slash-row-height) * var(--skill-slash-visible-rows)) +
(var(--skill-slash-gap) * (var(--skill-slash-visible-rows) + 1)) + 2px + 2px - 2px
);
border: 1px solid var(--claude-border);
border: 1px solid var(--border-default);
border-top-left-radius: var(--skill-slash-radius);
border-top-right-radius: var(--skill-slash-radius);
background: var(--surface-soft);
@ -224,7 +224,7 @@
border-radius: 7px;
padding: 3px 9px;
background: transparent;
color: var(--claude-text);
color: var(--text-primary);
text-align: left;
cursor: pointer;
}
@ -275,7 +275,7 @@
.skill-slash-item__description {
flex: 1 1 auto;
min-width: 0;
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 12px;
white-space: nowrap;
overflow: hidden;
@ -289,7 +289,7 @@
display: flex;
align-items: center;
padding: 3px 9px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 11px;
}
@ -313,7 +313,7 @@ body[data-theme='dark'] {
.skill-slash-menu-wrapper {
background: var(--badge-bg);
border-color: var(--claude-border);
border-color: var(--border-default);
}
.skill-slash-item__name {
@ -401,7 +401,7 @@ body[data-theme='light'] {
.context-usage-ring {
--context-progress: 0%;
--context-ring-color: var(--claude-accent);
--context-ring-color: var(--accent);
width: 18px;
height: 18px;
border-radius: 50%;
@ -432,7 +432,7 @@ body[data-theme='light'] {
border: 1px solid var(--theme-control-border);
background: var(--theme-surface-soft);
box-shadow: none;
color: var(--claude-text);
color: var(--text-primary);
font-size: 12px;
line-height: 1.35;
opacity: 0;
@ -451,7 +451,7 @@ body[data-theme='light'] {
.permission-switcher__btn {
border: none;
background: transparent;
color: var(--claude-text);
color: var(--text-primary);
border-radius: 999px;
padding: 4px 12px;
font-size: 14px;
@ -465,7 +465,7 @@ body[data-theme='light'] {
}
.permission-switcher__btn:hover:not(:disabled) {
color: var(--claude-text);
color: var(--text-primary);
text-decoration: none;
background: var(--theme-chip-bg);
box-shadow: none;
@ -516,14 +516,14 @@ body[data-theme='light'] {
.permission-switcher__group-title {
font-size: 12px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-weight: 600;
padding: 2px 4px;
}
.permission-switcher__caret {
font-size: 14px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
transform: rotate(90deg);
transition: transform 0.18s ease;
}
@ -547,7 +547,7 @@ body[data-theme='light'] {
border-radius: 10px;
padding: 8px 10px;
cursor: pointer;
color: var(--claude-text);
color: var(--text-primary);
display: flex;
flex-direction: column;
gap: 2px;
@ -568,7 +568,7 @@ body[data-theme='light'] {
.permission-switcher__item-desc {
font-size: 11px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
line-height: 1.35;
}
@ -684,7 +684,7 @@ body[data-theme='light'] {
.stadium-input-editor p.is-editor-empty:first-child::before {
content: attr(data-placeholder);
color: var(--claude-text-tertiary);
color: var(--text-tertiary);
float: left;
height: 0;
pointer-events: none;
@ -733,7 +733,7 @@ body[data-theme='light'] {
font-size: 14px;
line-height: 1.4;
font-family: inherit;
color: var(--claude-text);
color: var(--text-primary);
white-space: pre-wrap;
word-break: break-all;
overflow-wrap: normal;
@ -793,7 +793,7 @@ body[data-theme='light'] {
border: none;
border-radius: 7px;
background: transparent;
color: var(--claude-text);
color: var(--text-primary);
font-size: 16px;
cursor: pointer;
display: flex;
@ -818,13 +818,13 @@ body[data-theme='light'] {
}
.stadium-btn.send-btn {
background: var(--claude-accent);
background: var(--accent);
color: var(--on-accent);
box-shadow: none;
}
.stadium-btn.send-btn:hover:not(:disabled) {
background: var(--claude-button-hover);
background: var(--accent-hover);
}
.stadium-btn.send-btn:disabled {
@ -971,7 +971,7 @@ body[data-theme='light'] {
width: 230px;
padding: 12px;
background: var(--surface-soft);
border: 1px solid var(--claude-border);
border: 1px solid var(--border-default);
border-radius: 18px;
box-shadow: none;
z-index: 30;
@ -988,7 +988,7 @@ body[data-theme='light'] {
border-radius: 12px;
font-size: 14px;
text-align: left;
color: var(--claude-text);
color: var(--text-primary);
display: flex;
align-items: center;
justify-content: space-between;
@ -1008,7 +1008,7 @@ body[data-theme='light'] {
.menu-entry.active {
background: var(--chip-bg);
color: var(--claude-text);
color: var(--text-primary);
font-weight: 600;
}
@ -1019,7 +1019,7 @@ body[data-theme='light'] {
.menu-entry.has-submenu .entry-arrow {
margin-left: 10px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.quick-submenu {
@ -1030,7 +1030,7 @@ body[data-theme='light'] {
min-width: 0;
padding: 12px;
border-radius: 18px;
border: 1px solid var(--claude-border);
border: 1px solid var(--border-default);
background: var(--surface-soft);
box-shadow: none;
z-index: 31;
@ -1039,7 +1039,7 @@ body[data-theme='light'] {
.submenu-status,
.submenu-empty {
font-size: 13px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.submenu-list {
@ -1129,7 +1129,7 @@ body[data-theme='light'] {
}
.menu-entry.submenu-entry .entry-arrow {
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.tool-submenu-list {
@ -1190,7 +1190,7 @@ body[data-theme='light'] {
right: 0;
bottom: calc(100% + 12px);
background: var(--surface-soft);
border: 1px solid var(--claude-border);
border: 1px solid var(--border-default);
border-radius: 12px;
box-shadow: none;
padding: 12px;
@ -1261,7 +1261,7 @@ body[data-theme='light'] {
flex: 1;
font-size: 13px;
font-weight: 500;
color: var(--claude-text);
color: var(--text-primary);
display: inline-flex;
flex-direction: column;
align-items: center;
@ -1296,7 +1296,7 @@ body[data-theme='light'] {
font-weight: 500;
text-align: left;
background: var(--surface-soft);
color: var(--claude-text);
color: var(--text-primary);
cursor: pointer;
transition: all 0.2s ease;
}
@ -1313,7 +1313,7 @@ body[data-theme='light'] {
.menu-btn.compress-entry {
background: var(--surface-soft);
color: var(--claude-success);
color: var(--state-success);
}
.menu-btn.compress-entry:not(:disabled):hover {
@ -1350,7 +1350,7 @@ body[data-theme='light'] {
.mobile-approval-overlay .mobile-panel-sheet--approval {
pointer-events: auto;
background: var(--claude-panel);
background: var(--surface-panel);
}
/* 手机端审批面板按钮样式 - 与电脑端一致 */
@ -1362,9 +1362,9 @@ body[data-theme='light'] {
}
.mobile-panel-sheet--approval .approval-btn--approve {
background: var(--claude-accent);
background: var(--accent);
color: var(--on-accent);
border-color: var(--claude-accent);
border-color: var(--accent);
}
.mobile-panel-sheet--approval .approval-btn--reject {
@ -1374,8 +1374,8 @@ body[data-theme='light'] {
.mobile-panel-sheet--approval .approval-btn--switch {
background: transparent;
border-color: var(--claude-accent);
color: var(--claude-accent);
border-color: var(--accent);
color: var(--accent);
}
/* 审批卡片样式保持一致 */
@ -1392,7 +1392,7 @@ body[data-theme='light'] {
.mobile-panel-sheet--approval .sidebar-header,
.mobile-panel-sheet--approval .sidebar .sidebar-header {
background: transparent !important;
border-color: var(--claude-border);
border-color: var(--border-default);
padding: 0 16px !important;
}

View File

@ -24,7 +24,7 @@
box-shadow: var(--theme-shadow-strong);
padding: 40px;
text-align: left;
color: var(--claude-text);
color: var(--text-primary);
display: flex;
flex-direction: column;
overflow: hidden;
@ -51,7 +51,7 @@
.personal-page-header p {
margin: 6px 0 0;
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 14px;
}
@ -60,7 +60,7 @@
padding: 8px 18px;
border-radius: 999px;
border: none;
background: linear-gradient(135deg, var(--claude-accent) 0%, var(--claude-accent-strong) 100%);
background: linear-gradient(135deg, var(--accent) 0%, var(--accent-strong) 100%);
color: var(--surface-card);
font-size: 13px;
font-weight: 600;
@ -82,7 +82,7 @@
border-radius: 999px;
border: 1px solid var(--theme-control-border-strong);
background: var(--theme-surface-soft);
color: var(--claude-text);
color: var(--text-primary);
font-size: 13px;
font-weight: 600;
cursor: pointer;
@ -128,7 +128,7 @@
}
.toggle-desc {
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 13px;
}
@ -165,7 +165,7 @@
}
.toggle-switch input:checked + .switch-slider {
background: var(--claude-accent);
background: var(--accent);
}
.toggle-switch input:checked + .switch-slider::before {
@ -229,7 +229,7 @@
.fancy-path {
fill: none;
stroke: var(--claude-text-secondary);
stroke: var(--text-secondary);
stroke-width: 5;
stroke-linecap: round;
stroke-linejoin: round;
@ -247,13 +247,13 @@
}
.toggle-row input:checked + .fancy-check .fancy-path {
stroke: var(--claude-accent);
stroke: var(--accent);
stroke-dasharray: 70.5096664428711 9999999;
stroke-dashoffset: -262.2723388671875;
}
.toggle-row span {
color: var(--claude-text);
color: var(--text-primary);
font-weight: 500;
}
@ -296,7 +296,7 @@
text-align: left;
font-weight: 600;
background: transparent;
color: var(--claude-text-secondary);
color: var(--text-secondary);
cursor: pointer;
transition:
background 0.2s ease,
@ -308,14 +308,14 @@
display: block;
font-size: 11px;
font-weight: 500;
color: var(--claude-text-tertiary);
color: var(--text-tertiary);
margin-top: 2px;
letter-spacing: 0.4px;
}
.personal-tab-button.active {
background: var(--theme-tab-active);
color: var(--claude-accent);
color: var(--accent);
box-shadow: 0 10px 24px var(--border-default);
}
@ -840,7 +840,7 @@
}
.behavior-field-header .field-desc {
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 13px;
}
@ -933,7 +933,7 @@
}
.experiment-copy p {
color: var(--claude-text-secondary);
color: var(--text-secondary);
line-height: 1.6;
}
@ -941,7 +941,7 @@
text-transform: uppercase;
font-size: 12px;
letter-spacing: 0.4em;
color: var(--claude-accent);
color: var(--accent);
margin-bottom: 6px;
}
@ -965,7 +965,7 @@
.experiment-toggle-info p {
margin: 0;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.experiment-toggle .toggle-text {
@ -988,7 +988,7 @@
margin: 0;
padding-left: 20px;
line-height: 1.6;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
/* Liquid glass overlay */
@ -1173,12 +1173,12 @@
}
.run-mode-card:hover {
border-color: var(--claude-accent);
border-color: var(--accent);
transform: translateY(-1px);
}
.run-mode-card.active {
border-color: var(--claude-accent);
border-color: var(--accent);
background: var(--theme-tab-active);
box-shadow: 0 8px 20px var(--border-default);
}
@ -1194,12 +1194,12 @@
.run-mode-title {
font-weight: 600;
font-size: 15px;
color: var(--claude-text);
color: var(--text-primary);
}
.run-mode-badge {
font-size: 12px;
color: var(--claude-accent);
color: var(--accent);
font-weight: 600;
background: var(--theme-badge-bg);
border-radius: 999px;
@ -1207,7 +1207,7 @@
}
.run-mode-desc {
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 13px;
line-height: 1.4;
}
@ -1230,12 +1230,12 @@
align-items: center;
gap: 4px;
font-weight: 600;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.thinking-presets button.active {
border-color: var(--claude-accent);
color: var(--claude-accent);
border-color: var(--accent);
color: var(--accent);
background: var(--theme-tab-active);
}
@ -1266,12 +1266,12 @@
}
.thinking-hint {
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 13px;
}
.behavior-hint {
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 13px;
}
@ -1290,7 +1290,7 @@
.link-button {
border: none;
background: none;
color: var(--claude-accent);
color: var(--accent);
font-weight: 600;
cursor: pointer;
}
@ -1313,7 +1313,7 @@
}
.tool-category-chip input {
accent-color: var(--claude-accent);
accent-color: var(--accent);
}
.global-actions {
@ -1356,14 +1356,14 @@
.theme-header p {
margin: 0;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.theme-badge {
padding: 6px 12px;
border-radius: 12px;
background: var(--theme-badge-bg);
color: var(--claude-accent);
color: var(--accent);
font-weight: 700;
font-size: 12px;
letter-spacing: 0.08em;
@ -1393,13 +1393,13 @@
}
.theme-card:hover {
border-color: var(--claude-accent);
border-color: var(--accent);
box-shadow: var(--theme-shadow-soft);
transform: translateY(-1px);
}
.theme-card.active {
border-color: var(--claude-accent);
border-color: var(--accent);
box-shadow: 0 10px 28px var(--shadow-color);
background: var(--theme-tab-active);
}
@ -1426,7 +1426,7 @@
.theme-check {
font-weight: 700;
color: var(--claude-accent);
color: var(--accent);
font-size: 16px;
}
@ -1437,13 +1437,13 @@
.theme-card-body p {
margin: 0;
color: var(--claude-text-secondary);
color: var(--text-secondary);
line-height: 1.5;
}
.theme-note {
margin: 0;
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 13px;
}
@ -1528,7 +1528,7 @@
padding: 0;
border-radius: 8px;
background: transparent;
color: var(--claude-text);
color: var(--text-primary);
cursor: pointer;
pointer-events: auto;
display: flex;
@ -1715,7 +1715,7 @@
border-radius: 50%;
border: none;
background: transparent;
color: var(--claude-text);
color: var(--text-primary);
display: flex;
align-items: center;
justify-content: center;
@ -1774,7 +1774,7 @@
.mobile-panel-sheet {
width: 100%;
height: 100%;
background: var(--claude-left-rail);
background: var(--surface-rail);
border-radius: 0;
box-shadow: none;
padding: 0;
@ -1787,11 +1787,11 @@
.mobile-panel-sheet--conversation,
.mobile-panel-sheet--workspace {
background: var(--claude-left-rail);
background: var(--surface-rail);
}
.mobile-panel-sheet--conversation {
background: var(--claude-left-rail);
background: var(--surface-rail);
width: min(var(--conversation-expanded-width, 306px), 100vw);
max-width: 100vw;
padding-top: 0;
@ -1804,14 +1804,14 @@
}
.mobile-panel-sheet--approval {
background: var(--claude-panel);
background: var(--surface-panel);
width: min(460px, 92vw);
max-width: 92vw;
padding-top: 0;
}
.mobile-panel-sheet--focus {
background: var(--claude-panel);
background: var(--surface-panel);
}
.mobile-overlay-close {
@ -1823,7 +1823,7 @@
border-radius: 16px;
border: none;
background: var(--border-default);
color: var(--claude-text);
color: var(--text-primary);
font-size: 18px;
cursor: pointer;
z-index: 5;
@ -1915,7 +1915,7 @@
.desktop-approval-sheet {
height: 100%;
max-width: 92vw;
background: var(--claude-panel);
background: var(--surface-panel);
box-shadow: var(--shadow-strong);
overflow: hidden;
display: flex;
@ -1999,7 +1999,7 @@
.confirm-message {
font-size: 14px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.confirm-warning {
@ -2028,7 +2028,7 @@
.confirm-button {
border: 1px solid var(--theme-control-border-strong);
background: transparent;
color: var(--claude-text);
color: var(--text-primary);
border-radius: 10px;
padding: 8px 20px;
font-weight: 500;
@ -2036,8 +2036,8 @@
}
.confirm-button--primary {
background: var(--claude-accent);
border-color: var(--claude-accent-strong);
background: var(--accent);
border-color: var(--accent-strong);
color: var(--on-accent);
}
@ -2091,7 +2091,7 @@
.subagent-activity-close {
border: none;
background: transparent;
color: var(--claude-text);
color: var(--text-primary);
font-size: 20px;
cursor: pointer;
padding: 4px 8px;
@ -2107,7 +2107,7 @@
align-items: center;
gap: 12px;
font-size: 13px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
flex-wrap: wrap;
}
@ -2186,7 +2186,7 @@
.subagent-activity-empty,
.subagent-activity-error {
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 13px;
}
@ -2206,7 +2206,7 @@
}
.subagent-activity-text {
color: var(--claude-text);
color: var(--text-primary);
line-height: 1.4;
word-break: break-all;
}
@ -2243,7 +2243,7 @@
border: 1px solid var(--theme-control-border);
border-radius: 12px;
background: var(--theme-surface-soft);
color: var(--claude-text);
color: var(--text-primary);
padding: 14px;
font-size: 12px;
line-height: 1.5;
@ -2393,7 +2393,7 @@
flex-wrap: wrap;
gap: 10px;
font-size: 13px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.tone-preset-buttons {
@ -2412,8 +2412,8 @@
}
.tone-preset-buttons button:hover {
border-color: var(--claude-accent);
color: var(--claude-accent);
border-color: var(--accent);
color: var(--accent);
}
.consideration-input {
@ -2431,7 +2431,7 @@
height: 38px;
border-radius: 12px;
border: none;
background: var(--claude-accent);
background: var(--accent);
color: var(--surface-card);
font-size: 20px;
font-weight: 600;
@ -2465,13 +2465,13 @@
.drag-handle {
font-size: 16px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.consideration-text {
flex: 1;
font-size: 14px;
color: var(--claude-text);
color: var(--text-primary);
}
.consideration-remove {
@ -2487,7 +2487,7 @@
.consideration-hint,
.consideration-limit {
font-size: 13px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.personal-form-actions {
@ -2541,7 +2541,7 @@
padding: 10px 20px;
border: none;
border-radius: 999px;
background: linear-gradient(135deg, var(--claude-accent) 0%, var(--claude-accent-strong) 100%);
background: linear-gradient(135deg, var(--accent) 0%, var(--accent-strong) 100%);
color: var(--text-primary);
font-weight: 600;
cursor: pointer;
@ -2577,7 +2577,7 @@
.personalization-loading {
padding: 32px 0;
text-align: center;
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 14px;
}
@ -2665,7 +2665,7 @@
opacity: 1;
}
.panel-card {
border-left: 1px solid var(--claude-border);
border-left: 1px solid var(--border-default);
padding: 0 0 0 0;
}
.app-loading-state {
@ -2677,7 +2677,7 @@
justify-content: center;
gap: 28px;
text-align: center;
color: var(--claude-text);
color: var(--text-primary);
}
.loading-animation {
@ -2697,15 +2697,15 @@
.loading-copy p {
margin: 6px 0 0;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.loading-refresh-btn {
margin-top: 14px;
border: 1px solid var(--claude-border);
border: 1px solid var(--border-default);
border-radius: 10px;
background: var(--claude-panel);
color: var(--claude-text);
background: var(--surface-panel);
color: var(--text-primary);
padding: 8px 14px;
font-size: 13px;
cursor: pointer;
@ -2722,8 +2722,8 @@
.boxes {
--size: 34px;
--duration: 900ms;
--box-primary: var(--claude-accent);
--box-secondary: var(--claude-accent-strong);
--box-primary: var(--accent);
--box-secondary: var(--accent-strong);
--box-tertiary: color-mix(in srgb, var(--accent) 30%, white);
height: calc(var(--size) * 2);
width: calc(var(--size) * 3);
@ -3461,7 +3461,7 @@ body[data-theme='dark'] {
/* 左侧面板头部(文件/待办事项/子智能体标签栏) */
.sidebar-header {
background: var(--claude-left-rail);
background: var(--surface-rail);
}
/* 移动端审批面板 - 移除所有背景让内容顶头 */
@ -3588,7 +3588,7 @@ body[data-theme='dark'] {
.tutorial-intro-eyebrow {
margin: 0;
font-size: 12px;
color: var(--claude-text-tertiary);
color: var(--text-tertiary);
letter-spacing: 0.06em;
}
@ -3602,7 +3602,7 @@ body[data-theme='dark'] {
.tutorial-status-text,
.tutorial-feature-item p {
margin: 0;
color: var(--claude-text-secondary);
color: var(--text-secondary);
line-height: 1.55;
}
@ -3643,7 +3643,7 @@ body[data-theme='dark'] {
.tutorial-status-badge.success {
color: var(--text-primary);
background: linear-gradient(135deg, var(--claude-success), color-mix(in srgb, var(--state-success) 70%, black));
background: linear-gradient(135deg, var(--state-success), color-mix(in srgb, var(--state-success) 70%, black));
}
.tutorial-intro-actions {
@ -3661,7 +3661,7 @@ body[data-theme='dark'] {
font-size: 14px;
font-weight: 700;
color: var(--text-primary);
background: linear-gradient(135deg, var(--claude-accent), var(--claude-accent-strong));
background: linear-gradient(135deg, var(--accent), var(--accent-strong));
cursor: pointer;
}
@ -3732,7 +3732,7 @@ body[data-theme='dark'] {
border-radius: 14px;
border: 1px solid var(--theme-control-border-strong);
background: var(--theme-surface-card);
color: var(--claude-text);
color: var(--text-primary);
box-shadow: var(--theme-shadow-strong);
padding: 14px 14px 12px;
pointer-events: auto;
@ -3754,13 +3754,13 @@ body[data-theme='dark'] {
.tutorial-popover__step {
font-size: 12px;
font-weight: 700;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.tutorial-popover__close {
border: 1px solid var(--theme-control-border);
background: var(--theme-surface-soft);
color: var(--claude-text);
color: var(--text-primary);
border-radius: 999px;
padding: 4px 10px;
font-size: 12px;
@ -3776,7 +3776,7 @@ body[data-theme='dark'] {
margin: 8px 0 0;
font-size: 13px;
line-height: 1.58;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.tutorial-popover__hint,
@ -3786,7 +3786,7 @@ body[data-theme='dark'] {
}
.tutorial-popover__hint {
color: var(--claude-accent-strong);
color: var(--accent-strong);
}
.tutorial-popover__warn {
@ -3808,7 +3808,7 @@ body[data-theme='dark'] {
font-size: 12px;
font-weight: 700;
color: var(--text-primary);
background: linear-gradient(135deg, var(--claude-accent), var(--claude-accent-strong));
background: linear-gradient(135deg, var(--accent), var(--accent-strong));
cursor: pointer;
}
@ -3818,7 +3818,7 @@ body[data-theme='dark'] {
}
.tutorial-btn--ghost {
color: var(--claude-text);
color: var(--text-primary);
border: 1px solid var(--theme-control-border);
background: var(--theme-surface-soft);
}

View File

@ -1,5 +1,5 @@
.token-count {
color: var(--claude-accent);
color: var(--accent);
font-weight: 500;
}
/* 顶部 Token 抽屉 */
@ -18,8 +18,8 @@
.token-display-panel {
width: min(860px, 92%);
background: var(--claude-panel);
border: 1px solid var(--claude-border);
background: var(--surface-panel);
border: 1px solid var(--border-default);
border-radius: 26px;
box-shadow: 0 24px 42px var(--shadow-color);
transition: transform 0.35s ease, opacity 0.35s ease;
@ -59,7 +59,7 @@
bottom: 0;
left: 50%;
width: 1px;
background: var(--claude-border);
background: var(--border-default);
transform: translateX(-0.5px);
pointer-events: none;
z-index: 0;
@ -92,7 +92,7 @@
align-items: center;
font-size: 14px;
font-weight: 600;
color: var(--claude-text);
color: var(--text-primary);
}
.stat-grid {
@ -115,7 +115,7 @@
}
.stat-label {
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 12px;
letter-spacing: 0.04em;
}
@ -124,20 +124,20 @@
font-weight: 600;
font-size: 18px;
font-variant-numeric: tabular-nums;
color: var(--claude-text);
color: var(--text-primary);
}
.stat-value--accent {
color: var(--claude-accent);
color: var(--accent);
font-size: 20px;
}
.stat-value--success {
color: var(--claude-success);
color: var(--state-success);
}
.stat-value--warning {
color: var(--claude-warning);
color: var(--state-warning);
}
.stat-value--mono {
@ -148,7 +148,7 @@
.stat-meta,
.stat-foot {
font-size: 12px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.stat-meta {
@ -161,7 +161,7 @@
.usage-placeholder {
font-size: 13px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.token-close-btn {
@ -262,19 +262,19 @@
.quota-label {
font-size: 12px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-weight: 500;
}
.quota-value {
font-weight: 600;
font-size: 16px;
color: var(--claude-text);
color: var(--text-primary);
}
.quota-reset {
font-size: 12px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.token-item {
@ -285,7 +285,7 @@
}
.token-label {
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 11px;
font-weight: 500;
text-transform: uppercase;
@ -293,19 +293,19 @@
}
.token-value {
color: var(--claude-text);
color: var(--text-primary);
font-weight: 600;
font-size: 18px;
font-variant-numeric: tabular-nums;
}
.token-value.current {
color: var(--claude-accent);
color: var(--accent);
font-size: 20px;
}
.token-value.input { color: var(--claude-success); }
.token-value.output { color: var(--claude-warning); }
.token-value.input { color: var(--state-success); }
.token-value.output { color: var(--state-warning); }
.panel-row-title {
display: flex;
@ -313,7 +313,7 @@
align-items: center;
margin-bottom: 12px;
font-size: 12px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
text-transform: uppercase;
letter-spacing: 0.04em;
}
@ -329,7 +329,7 @@
font-size: 11px;
font-weight: 600;
background: var(--badge-bg);
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.quota-toast {
@ -338,12 +338,12 @@
right: 32px;
padding: 12px 18px;
border-radius: 12px;
background: var(--claude-bg);
border: 1px solid var(--claude-border-strong);
background: var(--surface-base);
border: 1px solid var(--border-strong);
box-shadow: 0 12px 30px var(--shadow-color);
z-index: 2000;
max-width: 320px;
color: var(--claude-text);
color: var(--text-primary);
font-weight: 500;
display: flex;
align-items: center;
@ -387,26 +387,26 @@
gap: 12px;
padding: 12px 14px;
border-radius: 14px;
background: var(--claude-bg);
border: 1px solid var(--claude-border-strong);
background: var(--surface-base);
border: 1px solid var(--border-strong);
box-shadow: 0 12px 30px var(--shadow-color);
color: var(--claude-text);
color: var(--text-primary);
}
.app-toast::before {
content: "";
width: 4px;
border-radius: 999px;
background: var(--claude-text-secondary);
background: var(--text-secondary);
align-self: stretch;
}
.app-toast--success::before {
background: var(--claude-success);
background: var(--state-success);
}
.app-toast--warning::before {
background: var(--claude-warning);
background: var(--state-warning);
}
.app-toast--error::before {
@ -432,30 +432,30 @@
.toast-close {
border: none;
background: transparent;
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 16px;
cursor: pointer;
padding: 2px;
}
.toast-close:hover {
color: var(--claude-text);
color: var(--text-primary);
}
.status-pill--running {
background: color-mix(in srgb, var(--state-success) 22%, transparent);
color: var(--claude-success);
color: var(--state-success);
}
.status-pill--stopped {
background: color-mix(in srgb, var(--state-warning) 22%, transparent);
color: var(--claude-warning);
color: var(--state-warning);
}
.status-pill--host {
background: var(--badge-bg);
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.container-metric-grid {
@ -471,7 +471,7 @@
}
.metric-label {
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 11px;
letter-spacing: 0.04em;
text-transform: uppercase;
@ -479,18 +479,18 @@
.metric-value {
font-weight: 600;
color: var(--claude-text);
color: var(--text-primary);
font-size: 16px;
font-variant-numeric: tabular-nums;
}
.metric-subtext {
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 12px;
}
.container-empty {
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 13px;
padding: 12px 0;
}
@ -503,7 +503,7 @@
.container-stats-card {
border-left: none;
border-top: 1px solid var(--claude-border);
border-top: 1px solid var(--border-default);
padding-left: 0;
padding-top: 16px;
}
@ -570,7 +570,7 @@
/* 搜索结果展示 */
.search-meta {
font-size: 14px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
line-height: 1.6;
margin-bottom: 12px;
word-break: break-word;
@ -593,11 +593,11 @@
.search-result-title {
font-weight: 600;
margin-bottom: 6px;
color: var(--claude-text);
color: var(--text-primary);
}
.search-result-url a {
color: var(--claude-accent-strong);
color: var(--accent-strong);
text-decoration: none;
word-break: break-all;
}
@ -608,6 +608,6 @@
.search-empty {
font-size: 13px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-style: italic;
}

View File

@ -24,7 +24,7 @@
.sidebar.right-sidebar .sidebar-header h3 {
font-size: 15px;
font-weight: 600;
color: var(--claude-text);
color: var(--text-primary);
margin: 0;
}
@ -46,7 +46,7 @@
border: none;
border-radius: 16px;
background: var(--hover-bg);
color: var(--claude-text);
color: var(--text-primary);
font-size: 20px;
cursor: pointer;
}
@ -57,7 +57,7 @@
border: none;
border-radius: 16px;
background: var(--hover-bg);
color: var(--claude-text);
color: var(--text-primary);
font-size: 20px;
cursor: pointer;
}
@ -69,9 +69,9 @@
height: var(--app-viewport);
display: flex;
flex-direction: column;
background: var(--claude-left-rail);
border-left: 1px solid var(--claude-border);
color: var(--claude-text);
background: var(--surface-rail);
border-left: 1px solid var(--border-default);
color: var(--text-primary);
overflow: hidden;
}
@ -83,7 +83,7 @@
align-items: center;
justify-content: space-between;
gap: 12px;
border-bottom: 1px solid var(--claude-border);
border-bottom: 1px solid var(--border-default);
}
.git-changes-panel__title {
@ -105,7 +105,7 @@
.git-changes-panel__upstream,
.git-changes-panel__arrow {
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.git-changes-panel__summary,
@ -132,7 +132,7 @@
border: none;
border-radius: 14px;
background: transparent;
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 18px;
line-height: 1;
cursor: pointer;
@ -140,7 +140,7 @@
.git-changes-panel__close:hover {
background: var(--theme-tab-active);
color: var(--claude-text);
color: var(--text-primary);
box-shadow: 0 1px 2px var(--shadow-color);
}
@ -149,13 +149,13 @@
min-height: 0;
overflow: auto;
padding: 12px;
scrollbar-color: color-mix(in srgb, var(--claude-text-secondary) 55%, transparent)
scrollbar-color: color-mix(in srgb, var(--text-secondary) 55%, transparent)
color-mix(in srgb, var(--theme-surface-muted) 70%, transparent);
scrollbar-width: thin;
}
.git-changes-panel * {
scrollbar-color: color-mix(in srgb, var(--claude-text-secondary) 55%, transparent)
scrollbar-color: color-mix(in srgb, var(--text-secondary) 55%, transparent)
color-mix(in srgb, var(--theme-surface-muted) 70%, transparent);
scrollbar-width: thin;
}
@ -175,7 +175,7 @@
.git-changes-panel::-webkit-scrollbar-thumb,
.git-changes-panel ::-webkit-scrollbar-thumb {
background: color-mix(in srgb, var(--claude-text-secondary) 55%, transparent);
background: color-mix(in srgb, var(--text-secondary) 55%, transparent);
border-radius: 999px;
border: 2px solid transparent;
background-clip: padding-box;
@ -214,7 +214,7 @@
justify-content: space-between;
gap: 10px;
padding: 0 8px;
color: var(--claude-text);
color: var(--text-primary);
font-size: 13px;
font-weight: 600;
}
@ -243,14 +243,14 @@
border: none;
border-radius: 9px;
background: transparent;
color: var(--claude-text-secondary);
color: var(--text-secondary);
cursor: pointer;
}
.git-change-file__open-btn:hover,
.git-change-file__open-btn.open {
background: var(--theme-tab-active);
color: var(--claude-text);
color: var(--text-primary);
box-shadow: 0 1px 2px var(--shadow-color);
}
@ -303,7 +303,7 @@ body[data-theme='dark'] .git-change-file__open-icon {
max-height: 260px;
overflow-y: auto;
padding: 6px;
border: 1px solid var(--claude-border);
border: 1px solid var(--border-default);
border-radius: 12px;
background: var(--theme-surface-muted);
box-shadow: none;
@ -319,7 +319,7 @@ body[data-theme='dark'] .git-change-file__open-icon {
border: none;
border-radius: 9px;
background: transparent;
color: var(--claude-text);
color: var(--text-primary);
font-size: 13px;
text-align: left;
cursor: pointer;
@ -339,7 +339,7 @@ body[data-theme='dark'] .git-change-file__open-icon {
.git-change-file__open-empty {
padding: 8px 10px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 12px;
font-weight: 400;
white-space: nowrap;
@ -359,14 +359,14 @@ body[data-theme='dark'] .git-change-file__open-icon {
border: none;
border-radius: 8px;
background: transparent;
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 12px;
cursor: pointer;
}
.git-change-file__reset:hover {
background: var(--theme-tab-active);
color: var(--claude-text);
color: var(--text-primary);
box-shadow: 0 1px 2px var(--shadow-color);
}
@ -394,7 +394,7 @@ body[data-theme='dark'] .git-change-file__open-icon {
border: none;
border-radius: 9px;
background: var(--theme-surface-muted);
color: var(--claude-text-secondary);
color: var(--text-secondary);
font: inherit;
font-family: inherit;
cursor: pointer;
@ -414,7 +414,7 @@ body[data-theme='dark'] .git-change-file__open-icon {
.git-change-file__fold:hover {
background: var(--theme-tab-active);
color: var(--claude-text);
color: var(--text-primary);
box-shadow: 0 1px 2px var(--shadow-color);
}
@ -426,7 +426,7 @@ body[data-theme='dark'] .git-change-file__open-icon {
align-items: center;
justify-content: center;
flex: 0 0 16px;
color: var(--claude-text-tertiary);
color: var(--text-tertiary);
text-align: center;
line-height: 1;
}
@ -449,7 +449,7 @@ body[data-theme='dark'] .git-change-file__open-icon {
.git-change-file__hunk-header {
padding: 3px 8px;
color: var(--claude-text-tertiary);
color: var(--text-tertiary);
white-space: pre;
}
@ -466,13 +466,13 @@ body[data-theme='dark'] .git-change-file__open-icon {
}
.git-change-line__num {
color: var(--claude-text-tertiary);
color: var(--text-tertiary);
text-align: right;
user-select: none;
}
.git-change-line__marker {
color: var(--claude-text-secondary);
color: var(--text-secondary);
text-align: center;
user-select: none;
}
@ -565,7 +565,7 @@ body[data-theme='dark'] .git-change-file__open-icon {
.no-files {
text-align: center;
color: var(--claude-text-secondary);
color: var(--text-secondary);
padding: 60px 20px;
font-size: 14px;
}
@ -577,7 +577,7 @@ body[data-theme='dark'] .git-change-file__open-icon {
}
.file-tab {
border: 1px solid var(--claude-border);
border: 1px solid var(--border-default);
border-radius: 12px;
overflow: hidden;
background: var(--surface-soft);
@ -591,16 +591,16 @@ body[data-theme='dark'] .git-change-file__open-icon {
justify-content: space-between;
align-items: center;
font-size: 14px;
border-bottom: 1px solid var(--claude-border);
border-bottom: 1px solid var(--border-default);
}
.file-name {
font-weight: 500;
color: var(--claude-text);
color: var(--text-primary);
}
.file-size {
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 12px;
}
@ -633,7 +633,7 @@ body[data-theme='dark'] .git-change-file__open-icon {
}
.approval-card {
border: 1px solid var(--claude-border);
border: 1px solid var(--border-default);
border-radius: 12px;
background: var(--theme-surface-soft);
box-shadow: var(--theme-shadow-soft);
@ -646,17 +646,17 @@ body[data-theme='dark'] .git-change-file__open-icon {
.approval-card__title {
font-size: 13px;
font-weight: 700;
color: var(--claude-text);
color: var(--text-primary);
}
.approval-card__summary {
font-size: 12px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.approval-path {
font-size: 12px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
word-break: break-all;
}
@ -707,7 +707,7 @@ body[data-theme='dark'] .git-change-file__open-icon {
flex-direction: column;
gap: 4px;
font-size: 12px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
background: var(--theme-surface-muted);
border: 1px solid var(--theme-control-border);
border-radius: 8px;
@ -729,18 +729,18 @@ body[data-theme='dark'] .git-change-file__open-icon {
.approval-note {
padding: 6px 8px;
font-size: 11px;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.approval-lines--old {
background: color-mix(in srgb, var(--claude-warning) 18%, transparent);
border: 1px solid color-mix(in srgb, var(--claude-warning) 50%, transparent);
background: color-mix(in srgb, var(--state-warning) 18%, transparent);
border: 1px solid color-mix(in srgb, var(--state-warning) 50%, transparent);
color: var(--text-primary);
}
.approval-lines--new {
background: color-mix(in srgb, var(--claude-success) 18%, transparent);
border: 1px solid color-mix(in srgb, var(--claude-success) 50%, transparent);
background: color-mix(in srgb, var(--state-success) 18%, transparent);
border: 1px solid color-mix(in srgb, var(--state-success) 50%, transparent);
color: var(--text-primary);
}
@ -788,7 +788,7 @@ body[data-theme='dark'] .git-change-file__open-icon {
.approval-btn--approve {
color: var(--theme-surface-strong);
background: var(--claude-success);
background: var(--state-success);
}
.approval-btn--switch {
@ -798,5 +798,5 @@ body[data-theme='dark'] .git-change-file__open-icon {
.approval-btn--reject {
color: var(--theme-surface-strong);
background: var(--claude-accent-strong);
background: var(--accent-strong);
}

View File

@ -10,9 +10,9 @@
height: var(--app-viewport) !important;
min-height: var(--app-viewport) !important;
overflow: hidden;
background: var(--claude-left-rail);
background: var(--surface-rail);
border-right: 0;
color: var(--claude-text);
color: var(--text-primary);
transition: width 320ms cubic-bezier(0.22, 1, 0.36, 1);
}
@ -25,7 +25,7 @@
width: 1px;
pointer-events: none;
opacity: 1;
background: var(--claude-border);
background: var(--border-default);
transition: opacity 320ms cubic-bezier(0.22, 1, 0.36, 1);
}
@ -61,7 +61,7 @@
border: 0;
border-radius: 8px;
background: transparent;
color: var(--claude-text);
color: var(--text-primary);
display: grid;
align-items: center;
}
@ -163,7 +163,7 @@
}
.monitor-mode-btn.blocked {
color: var(--claude-text-tertiary);
color: var(--text-tertiary);
opacity: 0.6;
}
@ -185,7 +185,7 @@
}
.search-inline-icon {
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.search-input {
@ -196,13 +196,13 @@
outline: 0;
padding: 0 12px 0 8px;
background: transparent;
color: var(--claude-text);
color: var(--text-primary);
font-size: 13px;
letter-spacing: -0.01em;
}
.search-input::placeholder {
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.conversation-sidebar .conversation-list {
@ -228,14 +228,14 @@
.conversation-sidebar .running-task-section {
margin: 0 8px 12px;
padding: 6px 0 8px;
border-bottom: 1px solid color-mix(in srgb, var(--claude-border) 72%, transparent);
border-bottom: 1px solid color-mix(in srgb, var(--border-default) 72%, transparent);
}
.conversation-sidebar .running-task-section-title {
margin: 0 8px 4px;
font-size: 12px;
font-weight: 700;
color: var(--claude-text-secondary);
color: var(--text-secondary);
letter-spacing: 0.01em;
}
@ -250,7 +250,7 @@
border: 0;
border-radius: 8px;
background: transparent;
color: var(--claude-text);
color: var(--text-primary);
text-align: left;
cursor: pointer;
transition:
@ -269,7 +269,7 @@
white-space: nowrap;
font-size: 11px;
font-weight: 600;
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
.conversation-sidebar .running-task-title {
@ -279,7 +279,7 @@
font-size: 13px;
line-height: 1.25;
letter-spacing: -0.01em;
color: var(--claude-text);
color: var(--text-primary);
}
.conversation-sidebar .running-task-main {
@ -362,7 +362,7 @@ body[data-theme='dark'] .conversation-sidebar .running-task-item.active {
inset: 0;
z-index: 1;
border-radius: 12px;
background: var(--claude-left-rail);
background: var(--surface-rail);
pointer-events: none;
}
@ -445,7 +445,7 @@ body[data-theme='dark'] .conversation-sidebar .conversation-item.active:focus-wi
min-width: 0;
padding-left: 12px;
padding-right: 4px;
color: var(--claude-text);
color: var(--text-primary);
font-size: 13px;
line-height: 1.25;
letter-spacing: -0.01em;
@ -468,7 +468,7 @@ body[data-theme='dark'] .conversation-sidebar .conversation-item.active:focus-wi
.conversation-sidebar .conversation-running-loader {
width: 16px;
height: 16px;
border: 2px solid var(--claude-text-secondary);
border: 2px solid var(--text-secondary);
border-bottom-color: transparent;
border-radius: 50%;
display: inline-block;
@ -480,7 +480,7 @@ body[data-theme='dark'] .conversation-sidebar .conversation-item.active:focus-wi
width: 18px;
height: 18px;
display: inline-block;
background: var(--claude-text-secondary);
background: var(--text-secondary);
mask: url('/static/icons/check.svg') center / contain no-repeat;
-webkit-mask: url('/static/icons/check.svg') center / contain no-repeat;
}
@ -501,7 +501,7 @@ body[data-theme='dark'] .conversation-sidebar .conversation-item.active:focus-wi
border: 0;
border-radius: 9px;
background: transparent;
color: var(--claude-text-secondary);
color: var(--text-secondary);
display: grid;
place-items: center;
cursor: pointer;
@ -518,7 +518,7 @@ body[data-theme='dark'] .conversation-sidebar .conversation-item.active:focus-wi
.conversation-sidebar .conversation-more-btn:hover,
.conversation-sidebar .conversation-action-wrap.menu-open .conversation-more-btn {
color: var(--claude-text);
color: var(--text-primary);
}
.conversation-sidebar .conversation-more-btn span {
@ -547,7 +547,7 @@ body[data-theme='dark'] .conversation-sidebar .conversation-item.active:focus-wi
width: max-content;
min-width: 92px;
padding: 6px;
border: 1px solid var(--claude-border);
border: 1px solid var(--border-default);
border-radius: 14px;
background: var(--theme-surface-strong);
box-shadow: none;
@ -583,7 +583,7 @@ body[data-theme='dark'] .conversation-sidebar .conversation-item.active:focus-wi
border: 0;
border-radius: 10px;
background: transparent;
color: var(--claude-text);
color: var(--text-primary);
display: grid;
grid-template-columns: 24px auto;
align-items: center;
@ -622,7 +622,7 @@ body[data-theme='dark'] .conversation-sidebar .conversation-item.active:focus-wi
.no-conversations,
.search-done,
.search-progress {
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 13px;
padding: 10px 12px;
white-space: nowrap;
@ -639,7 +639,7 @@ body[data-theme='dark'] .conversation-sidebar .conversation-item.active:focus-wi
border-radius: 10px;
padding: 0 12px;
background: transparent;
color: var(--claude-text-secondary);
color: var(--text-secondary);
cursor: pointer;
text-align: left;
transition:
@ -649,7 +649,7 @@ body[data-theme='dark'] .conversation-sidebar .conversation-item.active:focus-wi
.load-more-btn:hover:not(:disabled) {
background: var(--theme-tab-active);
color: var(--claude-text);
color: var(--text-primary);
}
.load-more-btn:disabled {
@ -744,13 +744,13 @@ body[data-theme='dark'] .workspace-group-header:hover {
border: 0;
border-radius: 8px;
background: transparent;
color: var(--claude-text);
color: var(--text-primary);
text-align: left;
cursor: pointer;
}
.workspace-folder-icon {
color: var(--claude-text-secondary);
color: var(--text-secondary);
}
/* 搜索结果分组头:仅作分类标识,不可交互、无 hover 高亮 */
@ -784,7 +784,7 @@ body[data-theme='dark'] .workspace-group-header.search-result-group-header:hover
.workspace-running-loader {
width: 14px;
height: 14px;
border: 2px solid var(--claude-text-secondary);
border: 2px solid var(--text-secondary);
border-bottom-color: transparent;
border-radius: 50%;
display: inline-block;
@ -812,7 +812,7 @@ body[data-theme='dark'] .workspace-group-header.search-result-group-header:hover
border: 0;
border-radius: 8px;
background: transparent;
color: var(--claude-text-secondary);
color: var(--text-secondary);
display: grid;
place-items: center;
cursor: pointer;
@ -825,7 +825,7 @@ body[data-theme='dark'] .workspace-group-header.search-result-group-header:hover
.workspace-more-btn:hover,
.workspace-group-actions.visible .workspace-more-btn[aria-expanded='true'] {
background: var(--theme-surface-strong);
color: var(--claude-text);
color: var(--text-primary);
}
.workspace-more-btn span {
@ -857,7 +857,7 @@ body[data-theme='dark'] .workspace-group-header.search-result-group-header:hover
width: max-content;
min-width: 120px;
padding: 6px;
border: 1px solid var(--claude-border);
border: 1px solid var(--border-default);
border-radius: 14px;
background: var(--theme-surface-strong);
box-shadow: none;
@ -882,7 +882,7 @@ body[data-theme='dark'] .workspace-group-header.search-result-group-header:hover
border: 0;
border-radius: 10px;
background: transparent;
color: var(--claude-text);
color: var(--text-primary);
display: grid;
align-items: center;
padding: 0 10px;
@ -939,7 +939,7 @@ body[data-theme='dark'] .workspace-group-header.search-result-group-header:hover
.workspace-no-conversations,
.workspace-conversations-loading {
color: var(--claude-text-secondary);
color: var(--text-secondary);
font-size: 13px;
padding: 10px 12px;
}
@ -963,7 +963,7 @@ body[data-theme='dark'] .workspace-group-header.search-result-group-header:hover
padding: 16px;
border-radius: 16px;
background: var(--theme-surface-strong);
border: 1px solid var(--claude-border);
border: 1px solid var(--border-default);
display: flex;
flex-direction: column;
gap: 12px;
@ -972,17 +972,17 @@ body[data-theme='dark'] .workspace-group-header.search-result-group-header:hover
.workspace-rename-title {
font-size: 15px;
font-weight: 600;
color: var(--claude-text);
color: var(--text-primary);
}
.workspace-rename-input {
width: 100%;
height: 40px;
padding: 0 12px;
border: 1px solid var(--claude-border);
border: 1px solid var(--border-default);
border-radius: 10px;
background: var(--surface-base);
color: var(--claude-text);
color: var(--text-primary);
font-size: 14px;
outline: none;
}
@ -1009,7 +1009,7 @@ body[data-theme='dark'] .workspace-group-header.search-result-group-header:hover
.workspace-rename-cancel {
background: transparent;
color: var(--claude-text);
color: var(--text-primary);
}
.workspace-rename-cancel:hover {

View File

@ -5,11 +5,11 @@
flex-direction: row;
height: var(--app-viewport);
align-items: stretch;
background: var(--claude-bg);
color: var(--claude-text);
background: var(--surface-base);
color: var(--text-primary);
}
#app {
min-height: var(--app-viewport);
background: var(--claude-bg);
background: var(--surface-base);
}

View File

@ -19,27 +19,27 @@
box-sizing: border-box;
}
:root {
--claude-bg: #eeece2;
--claude-panel: rgba(255, 255, 255, 0.92);
--claude-border: rgba(118, 103, 84, 0.25);
--claude-text: #3d3929;
--claude-text-secondary: #7f7766;
--claude-accent: #da7756;
--claude-muted: rgba(121, 109, 94, 0.45);
--app-bg: #eeece2;
--app-panel: rgba(255, 255, 255, 0.92);
--app-border: rgba(118, 103, 84, 0.25);
--app-text: #3d3929;
--app-text-secondary: #7f7766;
--app-accent: #da7756;
--app-muted: rgba(121, 109, 94, 0.45);
}
body {
font-family: 'Iowan Old Style', ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;
background: var(--claude-bg);
color: var(--claude-text);
background: var(--app-bg);
color: var(--app-text);
height: 100vh;
display: flex;
flex-direction: column;
overflow: hidden;
}
.header {
background: var(--claude-bg);
background: var(--app-bg);
padding: 15px 24px;
border-bottom: 1px solid var(--claude-border);
border-bottom: 1px solid var(--app-border);
box-shadow: 0 10px 20px rgba(61, 57, 41, 0.08);
}
.header h1 {
@ -65,12 +65,12 @@
animation: none;
}
.session-tabs {
background: var(--claude-bg);
background: var(--app-bg);
padding: 12px 24px;
display: flex;
gap: 10px;
overflow-x: auto;
border-bottom: 1px solid var(--claude-border);
border-bottom: 1px solid var(--app-border);
box-shadow: inset 0 -1px rgba(61, 57, 41, 0.05);
}
.tab {
@ -84,7 +84,7 @@
align-items: center;
gap: 8px;
white-space: nowrap;
color: var(--claude-text);
color: var(--app-text);
}
.tab:hover {
background: rgba(255, 255, 255, 0.95);
@ -92,8 +92,8 @@
transform: translateY(-2px);
}
.tab.active {
background: var(--claude-accent);
border-color: var(--claude-accent);
background: var(--app-accent);
border-color: var(--app-accent);
color: #fffaf0;
box-shadow: 0 10px 24px rgba(218, 119, 86, 0.26);
}
@ -115,7 +115,7 @@
box-shadow: 0 24px 48px rgba(61, 57, 41, 0.16);
display: flex;
flex-direction: column;
border: 1px solid var(--claude-border);
border: 1px solid var(--app-border);
}
.terminal-header {
background: rgba(255, 255, 255, 0.86);
@ -123,14 +123,14 @@
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 1px solid var(--claude-border);
border-bottom: 1px solid var(--app-border);
}
.terminal-title {
display: flex;
align-items: center;
gap: 10px;
font-size: 14px;
color: var(--claude-text-secondary);
color: var(--app-text-secondary);
}
.terminal-controls {
display: flex;
@ -163,7 +163,7 @@
height: 100%;
margin: 0 14px 0 18px;
background: #ffffff;
color: var(--claude-text);
color: var(--app-text);
overflow: hidden;
display: flex;
min-height: 0;
@ -191,10 +191,10 @@
}
.sidebar {
width: 300px;
background: var(--claude-panel);
background: var(--app-panel);
border-radius: 18px;
padding: 20px;
border: 1px solid var(--claude-border);
border: 1px solid var(--app-border);
box-shadow: 0 18px 40px rgba(61, 57, 41, 0.1);
overflow-y: auto;
scrollbar-width: none;
@ -208,7 +208,7 @@
.info-section h3 {
font-size: 14px;
margin-bottom: 10px;
color: var(--claude-text-secondary);
color: var(--app-text-secondary);
letter-spacing: 0.05em;
}
.info-item {
@ -219,10 +219,10 @@
font-size: 14px;
}
.info-label {
color: var(--claude-text-secondary);
color: var(--app-text-secondary);
}
.info-value {
color: var(--claude-text);
color: var(--app-text);
font-weight: 600;
}
.command-history {
@ -238,20 +238,20 @@
margin: 3px 0;
font-family: inherit;
font-size: 12px;
color: var(--claude-accent);
border-left: 3px solid var(--claude-accent);
color: var(--app-accent);
border-left: 3px solid var(--app-accent);
padding-left: 10px;
background: rgba(218, 119, 86, 0.08);
border-radius: 6px;
}
.status-bar {
background: var(--claude-panel);
background: var(--app-panel);
padding: 12px 24px;
display: flex;
justify-content: space-between;
align-items: center;
font-size: 13px;
border-top: 1px solid var(--claude-border);
border-top: 1px solid var(--app-border);
box-shadow: 0 -8px 18px rgba(61, 57, 41, 0.08);
}
.status-left {
@ -262,7 +262,7 @@
display: flex;
align-items: center;
gap: 6px;
color: var(--claude-text-secondary);
color: var(--app-text-secondary);
}
@media (max-width: 768px) {
.main-content {
@ -276,7 +276,7 @@
width: 40px;
height: 40px;
border: 3px solid rgba(61, 57, 41, 0.15);
border-top-color: var(--claude-accent);
border-top-color: var(--app-accent);
border-radius: 50%;
animation: spin 1s linear infinite;
margin: 20px auto;

View File

@ -2,12 +2,12 @@ from __future__ import annotations
import unittest
from utils.api_client import DeepSeekClient
from utils.api_client import APIClient
class APIClientMultimodalSanitizeTest(unittest.TestCase):
def test_text_only_model_adds_notice_when_only_media_parts(self):
client = DeepSeekClient(web_mode=True)
client = APIClient(web_mode=True)
client.model_key = "DeepSeek-V4-Pro High" # custom_models.json: multimodal=none
messages = [
@ -29,7 +29,7 @@ class APIClientMultimodalSanitizeTest(unittest.TestCase):
)
def test_text_only_model_strips_image_parts_to_text(self):
client = DeepSeekClient(web_mode=True)
client = APIClient(web_mode=True)
client.model_key = "DeepSeek-V4-Pro High" # custom_models.json: multimodal=none
messages = [
@ -54,7 +54,7 @@ class APIClientMultimodalSanitizeTest(unittest.TestCase):
)
def test_profile_text_only_fallback_strips_media_parts(self):
client = DeepSeekClient(web_mode=True)
client = APIClient(web_mode=True)
client.model_key = ""
client.model_multimodal = "none"
@ -79,7 +79,7 @@ class APIClientMultimodalSanitizeTest(unittest.TestCase):
)
def test_profile_multimodal_model_keeps_image_parts(self):
client = DeepSeekClient(web_mode=True)
client = APIClient(web_mode=True)
client.model_key = ""
client.model_multimodal = "image,video"
@ -103,7 +103,7 @@ class APIClientMultimodalSanitizeTest(unittest.TestCase):
)
def test_profile_multimodal_fallback_works_when_model_key_missing(self):
client = DeepSeekClient(web_mode=True)
client = APIClient(web_mode=True)
client.model_key = "" # 模拟未知/缺失 key仅走 profile 兜底
client.model_multimodal = "none"

View File

@ -22,7 +22,7 @@ os.environ["SUB_AGENT_STATE_FILE"] = str(_test_tmp / "state.json")
os.environ["SUB_AGENT_PROJECT_RESULTS_DIR"] = str(_test_tmp / "results")
from modules.sub_agent import SubAgentManager
from utils.api_client import DeepSeekClient
from utils.api_client import APIClient
class FakeTerminal:
@ -85,7 +85,7 @@ class FakeTerminal:
class FakeModel:
"""按脚本驱动 DeepSeekClient.chat 的返回。"""
"""按脚本驱动 APIClient.chat 的返回。"""
def __init__(self, responses: List[List[Dict[str, Any]]]):
self.responses = responses
@ -122,13 +122,13 @@ def make_finish_chunk() -> Dict[str, Any]:
def install_fake_model(responses: List[List[Dict[str, Any]]]):
fake = FakeModel(responses)
original = DeepSeekClient.chat
DeepSeekClient.chat = fake.chat
original = APIClient.chat
APIClient.chat = fake.chat
return fake, original
def restore_model(original):
DeepSeekClient.chat = original
APIClient.chat = original
def test_write_file_and_edit():

Some files were not shown because too many files have changed in this diff Show More