/**
 * OpenCPAi 全局主题系统 v1.0
 * ===========================
 * 
 * 设计原则：
 * 1. 科技感 + 专业 + 优雅（适合财税审计人员，女性友好）
 * 2. 参考 ChatGPT/豆包/Notion 的成熟配色
 * 3. 支持三种主题：深色(dark)、浅色(light)、中性(neutral)
 * 
 * 使用方法：
 * 1. 在 HTML 中引入此文件
 * 2. 在 <html> 或 <body> 上添加 data-theme="dark|light|neutral"
 * 3. 使用 CSS 变量，如 var(--bg-primary)
 */

/* ============================================
   一、语义化颜色变量（按用途命名）
   ============================================ */

:root {
    /* ========== 品牌色（固定不变）========== */
    --brand-primary: #3B82F6;
    /* 品牌蓝 - 专业、可信赖 */
    --brand-secondary: #8B5CF6;
    /* 品牌紫 - 科技、优雅 */
    --brand-cyan: #06B6D4;
    /* 品牌青 - Lovable风格活力色 */
    --brand-gradient: linear-gradient(135deg, #3B82F6, #8B5CF6);
    --brand-gradient-cyan: linear-gradient(135deg, #3B82F6, #06B6D4);

    /* ========== 功能色（固定不变）========== */
    --color-success: #10B981;
    /* 成功/通过 - 绿色 */
    --color-warning: #F59E0B;
    /* 警告/注意 - 橙色 */
    --color-error: #EF4444;
    /* 错误/危险 - 红色 */
    --color-info: #3B82F6;
    /* 信息/提示 - 蓝色 */

    /* ========== 微信专用 ========== */
    --wechat-green: #07C160;

    /* ========== 过渡动画 ========== */
    --transition-colors: color 0.2s ease, background-color 0.2s ease, border-color 0.2s ease;
}

/* ============================================
   二、深色主题 (Dark) - 默认
   参考: ChatGPT深色模式
   ============================================ */

[data-theme="dark"],
:root {
    /* 背景层级（由深到浅）*/
    --bg-base: #0a0a0a;
    /* 最底层背景 */
    --bg-primary: #0f0f0f;
    /* 主要背景 */
    --bg-secondary: #171717;
    /* 次要背景（卡片、侧边栏）*/
    --bg-tertiary: #1f1f1f;
    /* 第三层（悬浮、输入框）*/
    --bg-elevated: #262626;
    /* 抬升层（下拉菜单、弹窗）*/

    /* 文字层级（由亮到暗）*/
    --text-primary: #FAFAFA;
    /* 主要文字 */
    --text-secondary: #A3A3A3;
    /* 次要文字 */
    --text-tertiary: #737373;
    /* 辅助文字 */
    --text-disabled: #525252;
    /* 禁用文字 */

    /* 边框 */
    --border-default: rgba(255, 255, 255, 0.08);
    --border-hover: rgba(255, 255, 255, 0.15);
    --border-active: rgba(255, 255, 255, 0.25);

    /* 交互状态 */
    --hover-overlay: rgba(255, 255, 255, 0.05);
    --active-overlay: rgba(255, 255, 255, 0.1);
    --focus-ring: rgba(59, 130, 246, 0.5);

    /* 阴影 */
    --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.5);
    --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.5);
    --shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.5);

    /* 滚动条 */
    --scrollbar-track: #1f1f1f;
    --scrollbar-thumb: #404040;
    --scrollbar-thumb-hover: #525252;

    /* 图标颜色 */
    --color-icon-primary: #FAFAFA;
    --color-icon-secondary: #A3A3A3;
    --color-icon-tertiary: #737373;
    --color-icon-brand: var(--brand-primary);
    --color-icon-success: var(--color-success);
    --color-icon-warning: var(--color-warning);
    --color-icon-error: var(--color-error);

    /* 前景色 (通用) */
    --foreground: #FAFAFA;
    --foreground-muted: #A3A3A3;
}

/* ============================================
   三、浅色主题 (Light)
   参考: ChatGPT浅色模式、豆包
   ============================================ */

[data-theme="light"] {
    /* 背景层级（由浅到深）*/
    --bg-base: #FFFFFF;
    /* 最底层背景 */
    --bg-primary: #FFFFFF;
    /* 主要背景 */
    --bg-secondary: #F7F7F8;
    /* 次要背景（卡片、侧边栏）*/
    --bg-tertiary: #ECECF1;
    /* 第三层（悬浮、输入框）*/
    --bg-elevated: #FFFFFF;
    /* 抬升层（下拉菜单、弹窗）*/

    /* 文字层级（由深到浅）*/
    --text-primary: #1A1A1A;
    /* 主要文字 */
    --text-secondary: #6B6B6B;
    /* 次要文字 */
    --text-tertiary: #8E8E8E;
    /* 辅助文字 */
    --text-disabled: #ABABAB;
    /* 禁用文字 */

    /* 边框 */
    --border-default: rgba(0, 0, 0, 0.08);
    --border-hover: rgba(0, 0, 0, 0.15);
    --border-active: rgba(0, 0, 0, 0.25);

    /* 交互状态 */
    --hover-overlay: rgba(0, 0, 0, 0.04);
    --active-overlay: rgba(0, 0, 0, 0.08);
    --focus-ring: rgba(59, 130, 246, 0.3);

    /* 阴影 */
    --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
    --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.07);
    --shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1);

    /* 滚动条 */
    --scrollbar-track: #F7F7F8;
    --scrollbar-thumb: #D1D1D1;
    --scrollbar-thumb-hover: #ABABAB;

    /* 图标颜色 */
    --color-icon-primary: #1A1A1A;
    --color-icon-secondary: #6B6B6B;
    --color-icon-tertiary: #8E8E8E;
    --color-icon-brand: var(--brand-primary);
    --color-icon-success: var(--color-success);
    --color-icon-warning: var(--color-warning);
    --color-icon-error: var(--color-error);

    /* 前景色 (通用) */
    --foreground: #1A1A1A;
    --foreground-muted: #6B6B6B;
}

/* ============================================
   四、中性主题 (Neutral) - 柔和深色
   参考: Notion深色、温柔科技风
   适合女性用户，柔和但不失专业
   ============================================ */

[data-theme="neutral"] {
    /* 背景层级（柔和深色，带一点暖调）*/
    --bg-base: #1A1B1E;
    /* 最底层背景 - 带微暖 */
    --bg-primary: #1E1F23;
    /* 主要背景 */
    --bg-secondary: #25262B;
    /* 次要背景 */
    --bg-tertiary: #2C2D33;
    /* 第三层 */
    --bg-elevated: #37383F;
    /* 抬升层 */

    /* 文字层级（柔和白，不刺眼）*/
    --text-primary: #E8E8ED;
    /* 主要文字 */
    --text-secondary: #9898A0;
    /* 次要文字 */
    --text-tertiary: #6C6C75;
    /* 辅助文字 */
    --text-disabled: #4A4A52;
    /* 禁用文字 */

    /* 边框 */
    --border-default: rgba(255, 255, 255, 0.06);
    --border-hover: rgba(255, 255, 255, 0.12);
    --border-active: rgba(255, 255, 255, 0.2);

    /* 交互状态 */
    --hover-overlay: rgba(255, 255, 255, 0.04);
    --active-overlay: rgba(255, 255, 255, 0.08);
    --focus-ring: rgba(139, 92, 246, 0.4);
    /* 紫色聚焦，更柔和 */

    /* 阴影 */
    --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.4);
    --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.4);
    --shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.4);

    /* 滚动条 */
    --scrollbar-track: #25262B;
    --scrollbar-thumb: #3D3E45;
    --scrollbar-thumb-hover: #4D4E55;

    /* 图标颜色 */
    --color-icon-primary: #E8E8ED;
    --color-icon-secondary: #9898A0;
    --color-icon-tertiary: #6C6C75;
    --color-icon-brand: var(--brand-secondary);
    --color-icon-success: var(--color-success);
    --color-icon-warning: var(--color-warning);
    --color-icon-error: var(--color-error);

    /* 前景色 (通用) */
    --foreground: #E8E8ED;
    --foreground-muted: #9898A0;
}

/* ============================================
   五、通用基础样式
   ============================================ */

/* 全局页面基色兜底：避免自定义 Tailwind 类失效时出现白底白字 */
html,
body {
    background-color: var(--bg-base);
    color: var(--text-primary);
}

/* 全局过渡 */
*,
*::before,
*::after {
    transition: var(--transition-colors);
}

/* 滚动条样式 */
::-webkit-scrollbar {
    width: 8px;
    height: 8px;
}

::-webkit-scrollbar-track {
    background: var(--scrollbar-track);
}

::-webkit-scrollbar-thumb {
    background: var(--scrollbar-thumb);
    border-radius: 4px;
}

::-webkit-scrollbar-thumb:hover {
    background: var(--scrollbar-thumb-hover);
}

/* 选中文本颜色 */
::selection {
    background: rgba(139, 92, 246, 0.3);
    color: var(--text-primary);
}

/* 下拉菜单选项 — 暗色主题兼容 */
[data-theme="dark"] select option {
    background: #1F2937;
    color: #E5E7EB;
}

/* 聚焦样式 */
:focus-visible {
    outline: 2px solid var(--focus-ring);
    outline-offset: 2px;
}

/* ============================================
   六、Tailwind CSS 兼容类（!important 防御层）
   说明：Tailwind CDN 注入的 <style> 在 theme.css 之后，
   同名类会被覆盖。加 !important 确保语义色始终生效。
   ============================================ */

/* 背景色 */
.bg-base {
    background-color: var(--bg-base) !important;
}

.bg-primary {
    background-color: var(--bg-primary) !important;
}

.bg-secondary {
    background-color: var(--bg-secondary) !important;
}

.bg-tertiary {
    background-color: var(--bg-tertiary) !important;
}

.bg-elevated {
    background-color: var(--bg-elevated) !important;
}

/* 文字色 */
.text-primary {
    color: var(--text-primary) !important;
}

.text-secondary {
    color: var(--text-secondary) !important;
}

.text-tertiary {
    color: var(--text-tertiary) !important;
}

.text-disabled {
    color: var(--text-disabled) !important;
}

/* 边框色 */
.border-default {
    border-color: var(--border-default) !important;
}

.border-hover {
    border-color: var(--border-hover) !important;
}

/* 品牌色 */
.text-brand {
    color: var(--brand-primary) !important;
}

.bg-brand {
    background-color: var(--brand-primary) !important;
}

.bg-brand-gradient {
    background: var(--brand-gradient) !important;
}

/* 功能色 */
.text-success {
    color: var(--color-success) !important;
}

.text-warning {
    color: var(--color-warning) !important;
}

.text-error {
    color: var(--color-error) !important;
}

.bg-success {
    background-color: var(--color-success) !important;
}

.bg-warning {
    background-color: var(--color-warning) !important;
}

.bg-error {
    background-color: var(--color-error) !important;
}

/* ============================================
   七、Tailwind 自定义类兼容层（系统性修复）
    说明：历史页面大量使用 bg-bg-* / text-accent-* 等类名，
    若未注入对应 Tailwind config，会导致背景/文字失效。
    ============================================ */

/* 背景语义别名 */
.bg-bg-dark {
    background-color: var(--bg-base) !important;
}

.bg-bg-card {
    background-color: var(--bg-secondary) !important;
}

.bg-bg-chat {
    background-color: var(--bg-secondary) !important;
}

.bg-bg-dark\/50 {
    background-color: color-mix(in srgb, var(--bg-base) 50%, transparent) !important;
}

.bg-bg-dark\/80 {
    background-color: color-mix(in srgb, var(--bg-base) 80%, transparent) !important;
}

.bg-bg-dark\/95 {
    background-color: color-mix(in srgb, var(--bg-base) 95%, transparent) !important;
}

.bg-bg-card\/30 {
    background-color: color-mix(in srgb, var(--bg-secondary) 30%, transparent) !important;
}

.bg-bg-card\/50 {
    background-color: color-mix(in srgb, var(--bg-secondary) 50%, transparent) !important;
}

/* 品牌色别名 */
.text-accent-blue {
    color: var(--brand-primary) !important;
}

.bg-accent-blue {
    background-color: var(--brand-primary) !important;
}

.text-accent-purple {
    color: var(--brand-secondary) !important;
}

.bg-accent-purple {
    background-color: var(--brand-secondary) !important;
}

.text-accent-green {
    color: var(--color-success) !important;
}

/* 半透明品牌背景 */
.bg-accent-blue\/10 {
    background-color: color-mix(in srgb, var(--brand-primary) 10%, transparent) !important;
}

.bg-accent-blue\/20 {
    background-color: color-mix(in srgb, var(--brand-primary) 20%, transparent) !important;
}

.bg-accent-blue\/30 {
    background-color: color-mix(in srgb, var(--brand-primary) 30%, transparent) !important;
}

.bg-accent-blue\/40 {
    background-color: color-mix(in srgb, var(--brand-primary) 40%, transparent) !important;
}

.hover\:bg-accent-blue\/20:hover {
    background-color: color-mix(in srgb, var(--brand-primary) 20%, transparent) !important;
}

.hover\:bg-accent-blue\/30:hover {
    background-color: color-mix(in srgb, var(--brand-primary) 30%, transparent) !important;
}

.hover\:bg-accent-blue\/40:hover {
    background-color: color-mix(in srgb, var(--brand-primary) 40%, transparent) !important;
}

/* 边框别名 */
.border-accent-blue\/30 {
    border-color: color-mix(in srgb, var(--brand-primary) 30%, transparent) !important;
}

.border-accent-blue\/40 {
    border-color: color-mix(in srgb, var(--brand-primary) 40%, transparent) !important;
}

.border-accent-blue\/50 {
    border-color: color-mix(in srgb, var(--brand-primary) 50%, transparent) !important;
}

/* 历史白色透明类在浅色主题可读性兜底 */
.border-white\/5,
.border-white\/10 {
    border-color: var(--border-default) !important;
}

.border-white\/20 {
    border-color: var(--border-hover) !important;
}

.bg-white\/5 {
    background-color: color-mix(in srgb, var(--bg-secondary) 70%, transparent) !important;
}

.bg-white\/10 {
    background-color: color-mix(in srgb, var(--bg-tertiary) 70%, transparent) !important;
}

/* 文本可读性修复：避免浅色主题下白字/浅灰字不可见 */
.text-white {
    color: var(--text-primary) !important;
}

.text-gray-100,
.text-gray-200,
.text-gray-300 {
    color: var(--text-secondary) !important;
}

.text-gray-400,
.text-gray-500 {
    color: var(--text-tertiary) !important;
}

/* 输入框聚焦兼容 */
.focus\:border-accent-blue\/50:focus {
    border-color: color-mix(in srgb, var(--brand-primary) 50%, transparent) !important;
}

.focus\:ring-accent-blue\/20:focus {
    box-shadow: 0 0 0 3px color-mix(in srgb, var(--brand-primary) 20%, transparent) !important;
}

/* ============================================
   Zinc / Gray 系列浅色主题兼容
   说明：历史页面使用 bg-zinc-* 等 Tailwind 原生暗色类，
   在浅色主题下需要反转为语义化颜色。
   ============================================ */

[data-theme="light"] .bg-zinc-900,
[data-theme="light"] .bg-zinc-900\/90 {
    background-color: #FFFFFF !important;
}

[data-theme="light"] .bg-zinc-800,
[data-theme="light"] .bg-zinc-800\/80 {
    background-color: #F3F4F6 !important;
}

[data-theme="light"] .bg-zinc-700 {
    background-color: #E5E7EB !important;
}

[data-theme="light"] .bg-zinc-600,
[data-theme="light"] .hover\:bg-zinc-600:hover {
    background-color: #D1D5DB !important;
}

[data-theme="light"] .hover\:bg-zinc-700:hover {
    background-color: #E5E7EB !important;
}

[data-theme="light"] .group-hover\:bg-zinc-600:hover,
[data-theme="light"] .group:hover .group-hover\:bg-zinc-600 {
    background-color: #D1D5DB !important;
}

[data-theme="light"] .bg-gray-700 {
    background-color: #E5E7EB !important;
}

/* 浅色主题下登录按钮反转 */
[data-theme="light"] .bg-white.text-black {
    background-color: #1A1A1A !important;
    color: #FFFFFF !important;
}

/* ============================================
   八、（已移除）Jenny 个性化主题色
   说明：v2.0 简化为 dark/light/neutral 三种界面主题
   ============================================ */

/* ============================================
    九、主题切换 JavaScript 辅助
   ============================================ */

/* ============================================
   确认弹窗 (ConfirmDialog) 样式
   ============================================ */

/* 遮罩层 */
.confirm-dialog-overlay {
    position: fixed;
    inset: 0;
    z-index: 9999;
    display: flex;
    align-items: center;
    justify-content: center;
    background: rgba(0, 0, 0, 0);
    backdrop-filter: blur(0px);
    transition: background 0.2s ease, backdrop-filter 0.2s ease;
}

.confirm-dialog-overlay.confirm-dialog-visible {
    background: rgba(0, 0, 0, 0.5);
    backdrop-filter: blur(4px);
}

/* 卡片 */
.confirm-dialog-card {
    background: var(--bg-elevated, #262626);
    border: 1px solid var(--border-default, rgba(255, 255, 255, 0.08));
    border-radius: 16px;
    padding: 24px;
    width: 90%;
    max-width: 380px;
    box-shadow: var(--shadow-lg, 0 10px 15px rgba(0, 0, 0, 0.5));
    transform: scale(0.9) translateY(10px);
    opacity: 0;
    transition: transform 0.2s ease, opacity 0.2s ease;
}

.confirm-dialog-visible .confirm-dialog-card {
    transform: scale(1) translateY(0);
    opacity: 1;
}

/* body 区域 */
.confirm-dialog-body {
    display: flex;
    align-items: flex-start;
    gap: 14px;
    margin-bottom: 24px;
}

/* 图标 */
.confirm-dialog-icon {
    flex-shrink: 0;
    width: 40px;
    height: 40px;
    border-radius: 10px;
    display: flex;
    align-items: center;
    justify-content: center;
}

.confirm-dialog-icon-danger {
    background: rgba(239, 68, 68, 0.12);
    color: #EF4444;
}

.confirm-dialog-icon-warning {
    background: rgba(245, 158, 11, 0.12);
    color: #F59E0B;
}

.confirm-dialog-icon-info {
    background: rgba(59, 130, 246, 0.12);
    color: #3B82F6;
}

/* 文本 */
.confirm-dialog-text {
    flex: 1;
    min-width: 0;
    padding-top: 2px;
}

.confirm-dialog-title {
    font-size: 15px;
    font-weight: 600;
    color: var(--text-primary, #FAFAFA);
    margin-bottom: 6px;
}

.confirm-dialog-message {
    font-size: 14px;
    color: var(--text-secondary, #A3A3A3);
    line-height: 1.5;
}

/* 按钮区域 */
.confirm-dialog-actions {
    display: flex;
    gap: 10px;
    justify-content: flex-end;
}

.confirm-dialog-btn {
    padding: 8px 20px;
    border-radius: 10px;
    font-size: 14px;
    font-weight: 500;
    cursor: pointer;
    border: none;
    outline: none;
    transition: all 0.15s ease;
    font-family: inherit;
}

.confirm-dialog-btn:focus-visible {
    box-shadow: 0 0 0 2px var(--focus-ring, rgba(59, 130, 246, 0.5));
}

/* 取消按钮 */
.confirm-dialog-btn-cancel {
    background: var(--bg-tertiary, #1f1f1f);
    color: var(--text-secondary, #A3A3A3);
    border: 1px solid var(--border-default, rgba(255, 255, 255, 0.08));
}

.confirm-dialog-btn-cancel:hover {
    background: var(--hover-overlay, rgba(255, 255, 255, 0.05));
    color: var(--text-primary, #FAFAFA);
    border-color: var(--border-hover, rgba(255, 255, 255, 0.15));
}

/* 危险按钮 (删除) */
.confirm-dialog-btn-danger {
    background: #EF4444;
    color: #fff;
}

.confirm-dialog-btn-danger:hover {
    background: #DC2626;
}

/* 警告按钮 */
.confirm-dialog-btn-warning {
    background: #F59E0B;
    color: #fff;
}

.confirm-dialog-btn-warning:hover {
    background: #D97706;
}

/* 主要按钮 */
.confirm-dialog-btn-primary {
    background: var(--brand-primary, #3B82F6);
    color: #fff;
}

.confirm-dialog-btn-primary:hover {
    background: #2563EB;
}

/* ============================================
   十、功能组件 Design Tokens（Component Tokens）
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   ★ 开发强制约定：
     新增功能卡片的 Tab / Badge / Button 禁止直接写 Tailwind 原子色
     （如 bg-orange-500/20 text-orange-200 border-orange-500/40）。
     必须使用下方语义化 token 类，由 theme.css 统一管理深/浅色映射。
     light-mode.css 只允许补丁旧代码，新代码无需补丁。

   Token 命名规范：
     --oc-{role}-{accent}-{property}
     role    : tab | badge | btn | card | drop
     accent  : orange | blue | violet | purple | teal | sky | indigo | emerald | amber
     property: bg | border | text | shadow | disabled-bg | disabled-text | disabled-border

   对应工具类（新代码直接用这些 class）：
     Tab 激活态  → .oc-tab-active-{accent}
     状态徽章    → .oc-badge-{accent}
     上传卡片    → .oc-upload-card
     渐变按钮    → .oc-btn-gradient-{accent}   （含 disabled 状态）
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   模块 → accent 颜色 对照表：
     orange  → 账龄划分 (aging-card)
     blue    → 编制现金流-原始 (cf source tab / cf submit)
     violet  → 合并报表清洗 (fsc-upload-card)
     purple  → 编制现金流-合并 (cf batch tab)
     teal    → 函证生成 (cgen-card)
     sky     → 银行流水清洗 (bf-upload-card)
     indigo  → 银行账证核对 (bgm-upload-card) / 研发费
     emerald → 免费标签 / 发票清洗 (ic-upload-card)
     amber   → 财审税审 (aat-upload-card)
     rose    → 报告排版 (layout-result-card)
   ============================================ */

/* ──────────────────────────────────────────────
   A. 渐变背景按钮文字保护
   ──────────────────────────────────────────────
   问题：theme.css section 6 的 .text-white 覆盖了所有主题，
         导致浅色模式下渐变按钮（蓝底白字）变成深色文字。
   方案：双类选择器特指度 (0,2,0) > 单类 (0,1,0)，无需 !important 也能覆盖。
   覆盖：所有 bg-gradient-to-* + text-white 的元素，永远保持白字。
   ────────────────────────────────────────────── */
.bg-gradient-to-r.text-white,
.bg-gradient-to-l.text-white,
.bg-gradient-to-br.text-white,
.bg-gradient-to-tr.text-white,
.bg-gradient-to-b.text-white {
    color: #ffffff !important;
}

/* ──────────────────────────────────────────────
   B. 上传功能卡片容器 Token
   ────────────────────────────────────────────── */
:root {
    --oc-card-bg: rgba(255, 255, 255, 0.06);
    --oc-card-border: rgba(255, 255, 255, 0.12);
    --oc-card-shadow: 0 4px 24px rgba(0, 0, 0, 0.3);
    --oc-card-section-bg: rgba(255, 255, 255, 0.05);
    /* tab 容器 / 描述区 */
    --oc-card-section-border: rgba(255, 255, 255, 0.08);
    --oc-card-drop-border: rgba(255, 255, 255, 0.18);
    /* 虚线上传框 */
    --oc-card-divider: rgba(255, 255, 255, 0.08);
    /* 卡片内输入框 */
    --oc-input-bg: rgba(255, 255, 255, 0.05);
    --oc-input-border: rgba(255, 255, 255, 0.20);
    --oc-input-text: #E5E7EB;
    --oc-input-placeholder: rgba(255, 255, 255, 0.35);
    /* 文件下载行 */
    --oc-file-row-bg: rgba(39, 39, 42, 0.80);
    --oc-file-row-border: rgba(255, 255, 255, 0.10);
    --oc-file-row-hover-bg: rgba(63, 63, 70, 0.80);
    /* 结果卡片（审定表/底稿结果） */
    --oc-result-card-bg: rgba(30, 35, 50, 0.70);
    --oc-result-card-border: rgba(255, 255, 255, 0.10);
}

[data-theme="light"] {
    --oc-card-bg: #ffffff;
    --oc-card-border: #E5E7EB;
    --oc-card-shadow: 0 2px 12px rgba(0, 0, 0, 0.07);
    --oc-card-section-bg: #F9FAFB;
    --oc-card-section-border: #E5E7EB;
    --oc-card-drop-border: #D1D5DB;
    --oc-card-divider: #F3F4F6;
    /* 卡片内输入框 */
    --oc-input-bg: #F9FAFB;
    --oc-input-border: #D1D5DB;
    --oc-input-text: #111827;
    --oc-input-placeholder: #9CA3AF;
    /* 文件下载行 */
    --oc-file-row-bg: #F3F4F6;
    --oc-file-row-border: #E5E7EB;
    --oc-file-row-hover-bg: #E5E7EB;
    /* 结果卡片 */
    --oc-result-card-bg: #FFFFFF;
    --oc-result-card-border: #E5E7EB;
}

.oc-upload-card {
    background: var(--oc-card-bg) !important;
    border-color: var(--oc-card-border) !important;
    box-shadow: var(--oc-card-shadow) !important;
}

.oc-card-section {
    background: var(--oc-card-section-bg) !important;
    border-color: var(--oc-card-section-border) !important;
}

.oc-drop-zone {
    border-color: var(--oc-card-drop-border) !important;
}

/* 卡片内输入框/下拉框/文本域（替代 bg-zinc-800 border-white/20） */
.oc-card-input {
    background-color: var(--oc-input-bg) !important;
    border-color: var(--oc-input-border) !important;
    color: var(--oc-input-text) !important;
}

.oc-card-input::placeholder {
    color: var(--oc-input-placeholder) !important;
}

/* 文件下载行（替代 bg-zinc-800/80 border-white/10） */
.oc-file-row {
    background-color: var(--oc-file-row-bg) !important;
    border-color: var(--oc-file-row-border) !important;
}

.oc-file-row:hover {
    background-color: var(--oc-file-row-hover-bg) !important;
}

/* 结果卡片容器（替代 bg-gradient-to-b from-gray-800/50 to-gray-900/50） */
.oc-result-card {
    background: var(--oc-result-card-bg) !important;
    border-color: var(--oc-result-card-border) !important;
    background-image: none !important;
}

/* ──────────────────────────────────────────────
   C. 各 accent 色系 Token 变量
   格式：
     --oc-tab-{accent}-bg      激活 Tab 背景
     --oc-tab-{accent}-border  激活 Tab 边框
     --oc-tab-{accent}-text    激活 Tab 文字
     --oc-badge-{accent}-bg    状态徽章背景
     --oc-badge-{accent}-border 状态徽章边框
     --oc-badge-{accent}-text  状态徽章文字
     --oc-btn-{accent}-shadow  渐变按钮投影
   ────────────────────────────────────────────── */

/* ── orange (账龄划分) ── */
:root {
    --oc-tab-orange-bg: rgba(249, 115, 22, 0.20);
    --oc-tab-orange-border: rgba(249, 115, 22, 0.40);
    --oc-tab-orange-text: #FDBA74;
    /* orange-300 */
    --oc-badge-orange-bg: rgba(249, 115, 22, 0.20);
    --oc-badge-orange-border: rgba(249, 115, 22, 0.30);
    --oc-badge-orange-text: #FDBA74;
    --oc-btn-orange-shadow: rgba(234, 88, 12, 0.28);
}

[data-theme="light"] {
    --oc-tab-orange-bg: #FFEDD5;
    /* orange-100 */
    --oc-tab-orange-border: #FDBA74;
    /* orange-300 */
    --oc-tab-orange-text: #C2410C;
    /* orange-700 */
    --oc-badge-orange-bg: #FFEDD5;
    --oc-badge-orange-border: #FDBA74;
    --oc-badge-orange-text: #C2410C;
    --oc-btn-orange-shadow: rgba(234, 88, 12, 0.22);
}

/* ── blue (现金流原始/财审提交) ── */
:root {
    --oc-tab-blue-bg: rgba(59, 130, 246, 0.20);
    --oc-tab-blue-border: rgba(59, 130, 246, 0.30);
    --oc-tab-blue-text: #93C5FD;
    /* blue-300 */
    --oc-badge-blue-bg: rgba(59, 130, 246, 0.20);
    --oc-badge-blue-border: rgba(59, 130, 246, 0.30);
    --oc-badge-blue-text: #93C5FD;
    --oc-btn-blue-shadow: rgba(59, 130, 246, 0.25);
}

[data-theme="light"] {
    --oc-tab-blue-bg: #DBEAFE;
    /* blue-100 */
    --oc-tab-blue-border: #93C5FD;
    /* blue-300 */
    --oc-tab-blue-text: #1D4ED8;
    /* blue-700 */
    --oc-badge-blue-bg: #DBEAFE;
    --oc-badge-blue-border: #93C5FD;
    --oc-badge-blue-text: #1D4ED8;
    --oc-btn-blue-shadow: rgba(59, 130, 246, 0.18);
}

/* ── violet (合并报表清洗/fsc submit) ── */
:root {
    --oc-tab-violet-bg: rgba(139, 92, 246, 0.20);
    --oc-tab-violet-border: rgba(139, 92, 246, 0.30);
    --oc-tab-violet-text: #C4B5FD;
    /* violet-300 */
    --oc-badge-violet-bg: rgba(139, 92, 246, 0.20);
    --oc-badge-violet-border: rgba(139, 92, 246, 0.30);
    --oc-badge-violet-text: #C4B5FD;
    --oc-btn-violet-shadow: rgba(139, 92, 246, 0.25);
}

[data-theme="light"] {
    --oc-tab-violet-bg: #EDE9FE;
    /* violet-100 */
    --oc-tab-violet-border: #C4B5FD;
    /* violet-300 */
    --oc-tab-violet-text: #5B21B6;
    /* violet-800 */
    --oc-badge-violet-bg: #EDE9FE;
    --oc-badge-violet-border: #C4B5FD;
    --oc-badge-violet-text: #5B21B6;
    --oc-btn-violet-shadow: rgba(139, 92, 246, 0.18);
}

/* ── purple (现金流合并 batch tab) ── */
:root {
    --oc-tab-purple-bg: rgba(168, 85, 247, 0.20);
    --oc-tab-purple-border: rgba(168, 85, 247, 0.30);
    --oc-tab-purple-text: #D8B4FE;
    /* purple-300 */
    --oc-badge-purple-bg: rgba(168, 85, 247, 0.20);
    --oc-badge-purple-border: rgba(168, 85, 247, 0.30);
    --oc-badge-purple-text: #D8B4FE;
    --oc-btn-purple-shadow: rgba(168, 85, 247, 0.25);
}

[data-theme="light"] {
    --oc-tab-purple-bg: #F3E8FF;
    /* purple-100 */
    --oc-tab-purple-border: #D8B4FE;
    /* purple-300 */
    --oc-tab-purple-text: #6B21A8;
    /* purple-800 */
    --oc-badge-purple-bg: #F3E8FF;
    --oc-badge-purple-border: #D8B4FE;
    --oc-badge-purple-text: #6B21A8;
    --oc-btn-purple-shadow: rgba(168, 85, 247, 0.18);
}

/* ── teal (函证生成 cgen) ── */
:root {
    --oc-tab-teal-bg: rgba(20, 184, 166, 0.20);
    --oc-tab-teal-border: rgba(20, 184, 166, 0.30);
    --oc-tab-teal-text: #5EEAD4;
    /* teal-300 */
    --oc-badge-teal-bg: rgba(20, 184, 166, 0.20);
    --oc-badge-teal-border: rgba(20, 184, 166, 0.30);
    --oc-badge-teal-text: #5EEAD4;
    --oc-btn-teal-shadow: rgba(20, 184, 166, 0.25);
}

[data-theme="light"] {
    --oc-tab-teal-bg: #CCFBF1;
    /* teal-100 */
    --oc-tab-teal-border: #5EEAD4;
    /* teal-300 */
    --oc-tab-teal-text: #0F766E;
    /* teal-700 */
    --oc-badge-teal-bg: #CCFBF1;
    --oc-badge-teal-border: #5EEAD4;
    --oc-badge-teal-text: #0F766E;
    --oc-btn-teal-shadow: rgba(20, 184, 166, 0.18);
}

/* ── sky (银行流水清洗 bf) ── */
:root {
    --oc-tab-sky-bg: rgba(14, 165, 233, 0.20);
    --oc-tab-sky-border: rgba(14, 165, 233, 0.30);
    --oc-tab-sky-text: #7DD3FC;
    /* sky-300 */
    --oc-badge-sky-bg: rgba(14, 165, 233, 0.20);
    --oc-badge-sky-border: rgba(14, 165, 233, 0.30);
    --oc-badge-sky-text: #7DD3FC;
    --oc-btn-sky-shadow: rgba(14, 165, 233, 0.25);
}

[data-theme="light"] {
    --oc-tab-sky-bg: #E0F2FE;
    /* sky-100 */
    --oc-tab-sky-border: #7DD3FC;
    /* sky-300 */
    --oc-tab-sky-text: #0369A1;
    /* sky-700 */
    --oc-badge-sky-bg: #E0F2FE;
    --oc-badge-sky-border: #7DD3FC;
    --oc-badge-sky-text: #0369A1;
    --oc-btn-sky-shadow: rgba(14, 165, 233, 0.18);
}

/* ── indigo (账证核对 bgm / 研发费 rd) ── */
:root {
    --oc-tab-indigo-bg: rgba(99, 102, 241, 0.20);
    --oc-tab-indigo-border: rgba(99, 102, 241, 0.30);
    --oc-tab-indigo-text: #A5B4FC;
    /* indigo-300 */
    --oc-badge-indigo-bg: rgba(99, 102, 241, 0.20);
    --oc-badge-indigo-border: rgba(99, 102, 241, 0.30);
    --oc-badge-indigo-text: #A5B4FC;
    --oc-btn-indigo-shadow: rgba(99, 102, 241, 0.25);
}

[data-theme="light"] {
    --oc-tab-indigo-bg: #E0E7FF;
    /* indigo-100 */
    --oc-tab-indigo-border: #A5B4FC;
    /* indigo-300 */
    --oc-tab-indigo-text: #3730A3;
    /* indigo-800 */
    --oc-badge-indigo-bg: #E0E7FF;
    --oc-badge-indigo-border: #A5B4FC;
    --oc-badge-indigo-text: #3730A3;
    --oc-btn-indigo-shadow: rgba(99, 102, 241, 0.18);
}

/* ── emerald (免费徽章 / ic 发票清洗) ── */
:root {
    --oc-tab-emerald-bg: rgba(16, 185, 129, 0.20);
    --oc-tab-emerald-border: rgba(16, 185, 129, 0.30);
    --oc-tab-emerald-text: #6EE7B7;
    /* emerald-300 */
    --oc-badge-emerald-bg: rgba(16, 185, 129, 0.20);
    --oc-badge-emerald-border: rgba(16, 185, 129, 0.30);
    --oc-badge-emerald-text: #6EE7B7;
    --oc-btn-emerald-shadow: rgba(16, 185, 129, 0.25);
}

[data-theme="light"] {
    --oc-tab-emerald-bg: #D1FAE5;
    /* emerald-100 */
    --oc-tab-emerald-border: #6EE7B7;
    /* emerald-300 */
    --oc-tab-emerald-text: #065F46;
    /* emerald-800 */
    --oc-badge-emerald-bg: #D1FAE5;
    --oc-badge-emerald-border: #6EE7B7;
    --oc-badge-emerald-text: #065F46;
    --oc-btn-emerald-shadow: rgba(16, 185, 129, 0.18);
}

/* ── amber (财审税审 aat) ── */
:root {
    --oc-tab-amber-bg: rgba(245, 158, 11, 0.20);
    --oc-tab-amber-border: rgba(245, 158, 11, 0.30);
    --oc-tab-amber-text: #FCD34D;
    /* amber-300 */
    --oc-badge-amber-bg: rgba(245, 158, 11, 0.20);
    --oc-badge-amber-border: rgba(245, 158, 11, 0.30);
    --oc-badge-amber-text: #FCD34D;
    --oc-btn-amber-shadow: rgba(245, 158, 11, 0.25);
}

[data-theme="light"] {
    --oc-tab-amber-bg: #FEF3C7;
    /* amber-100 */
    --oc-tab-amber-border: #FCD34D;
    /* amber-300 */
    --oc-tab-amber-text: #92400E;
    /* amber-800 */
    --oc-badge-amber-bg: #FEF3C7;
    --oc-badge-amber-border: #FCD34D;
    --oc-badge-amber-text: #92400E;
    --oc-btn-amber-shadow: rgba(245, 158, 11, 0.18);
}

/* ── rose (报告排版 layout-result-card) ── */
:root {
    --oc-tab-rose-bg: rgba(244, 63, 94, 0.20);
    --oc-tab-rose-border: rgba(244, 63, 94, 0.35);
    --oc-tab-rose-text: #FDA4AF;
    /* rose-300 */
    --oc-badge-rose-bg: rgba(244, 63, 94, 0.20);
    --oc-badge-rose-border: rgba(244, 63, 94, 0.30);
    --oc-badge-rose-text: #FDA4AF;
    --oc-btn-rose-shadow: rgba(244, 63, 94, 0.25);
}

[data-theme="light"] {
    --oc-tab-rose-bg: #FFF1F2;
    /* rose-50 */
    --oc-tab-rose-border: #FECDD3;
    /* rose-200 */
    --oc-tab-rose-text: #BE123C;
    /* rose-700 */
    --oc-badge-rose-bg: #FFF1F2;
    --oc-badge-rose-border: #FECDD3;
    --oc-badge-rose-text: #BE123C;
    --oc-btn-rose-shadow: rgba(244, 63, 94, 0.18);
}

/* ──────────────────────────────────────────────
   D. 组件工具类（新代码直接使用，无需 light-mode.css 补丁）
   ────────────────────────────────────────────── */

/* Token 自带边框激活 — 元素无需额外写 border 类即可显示边框 */
[class*="oc-tab-active-"],
[class*="oc-badge-"] {
    border-width: 1px !important;
    border-style: solid !important;
}

/* Tab 激活态（模式切换按钮，active 分支） */
.oc-tab-active-orange {
    background-color: var(--oc-tab-orange-bg) !important;
    border-color: var(--oc-tab-orange-border) !important;
    color: var(--oc-tab-orange-text) !important;
}

.oc-tab-active-blue {
    background-color: var(--oc-tab-blue-bg) !important;
    border-color: var(--oc-tab-blue-border) !important;
    color: var(--oc-tab-blue-text) !important;
}

.oc-tab-active-violet {
    background-color: var(--oc-tab-violet-bg) !important;
    border-color: var(--oc-tab-violet-border) !important;
    color: var(--oc-tab-violet-text) !important;
}

.oc-tab-active-purple {
    background-color: var(--oc-tab-purple-bg) !important;
    border-color: var(--oc-tab-purple-border) !important;
    color: var(--oc-tab-purple-text) !important;
}

.oc-tab-active-teal {
    background-color: var(--oc-tab-teal-bg) !important;
    border-color: var(--oc-tab-teal-border) !important;
    color: var(--oc-tab-teal-text) !important;
}

.oc-tab-active-sky {
    background-color: var(--oc-tab-sky-bg) !important;
    border-color: var(--oc-tab-sky-border) !important;
    color: var(--oc-tab-sky-text) !important;
}

.oc-tab-active-indigo {
    background-color: var(--oc-tab-indigo-bg) !important;
    border-color: var(--oc-tab-indigo-border) !important;
    color: var(--oc-tab-indigo-text) !important;
}

.oc-tab-active-emerald {
    background-color: var(--oc-tab-emerald-bg) !important;
    border-color: var(--oc-tab-emerald-border) !important;
    color: var(--oc-tab-emerald-text) !important;
}

.oc-tab-active-amber {
    background-color: var(--oc-tab-amber-bg) !important;
    border-color: var(--oc-tab-amber-border) !important;
    color: var(--oc-tab-amber-text) !important;
}

/* 状态徽章（"待上传"/"处理中"/"完成"等） */
.oc-badge-orange {
    background-color: var(--oc-badge-orange-bg) !important;
    border-color: var(--oc-badge-orange-border) !important;
    color: var(--oc-badge-orange-text) !important;
}

.oc-badge-blue {
    background-color: var(--oc-badge-blue-bg) !important;
    border-color: var(--oc-badge-blue-border) !important;
    color: var(--oc-badge-blue-text) !important;
}

.oc-badge-violet {
    background-color: var(--oc-badge-violet-bg) !important;
    border-color: var(--oc-badge-violet-border) !important;
    color: var(--oc-badge-violet-text) !important;
}

.oc-badge-purple {
    background-color: var(--oc-badge-purple-bg) !important;
    border-color: var(--oc-badge-purple-border) !important;
    color: var(--oc-badge-purple-text) !important;
}

.oc-badge-teal {
    background-color: var(--oc-badge-teal-bg) !important;
    border-color: var(--oc-badge-teal-border) !important;
    color: var(--oc-badge-teal-text) !important;
}

.oc-badge-sky {
    background-color: var(--oc-badge-sky-bg) !important;
    border-color: var(--oc-badge-sky-border) !important;
    color: var(--oc-badge-sky-text) !important;
}

.oc-badge-indigo {
    background-color: var(--oc-badge-indigo-bg) !important;
    border-color: var(--oc-badge-indigo-border) !important;
    color: var(--oc-badge-indigo-text) !important;
}

.oc-badge-emerald {
    background-color: var(--oc-badge-emerald-bg) !important;
    border-color: var(--oc-badge-emerald-border) !important;
    color: var(--oc-badge-emerald-text) !important;
}

.oc-badge-amber {
    background-color: var(--oc-badge-amber-bg) !important;
    border-color: var(--oc-badge-amber-border) !important;
    color: var(--oc-badge-amber-text) !important;
}

/* 渐变提交按钮投影（与 bg-gradient-to-r from-X to-Y 配合使用） */
.oc-btn-shadow-orange {
    box-shadow: 0 2px 10px var(--oc-btn-orange-shadow) !important;
}

.oc-btn-shadow-blue {
    box-shadow: 0 2px 10px var(--oc-btn-blue-shadow) !important;
}

.oc-btn-shadow-violet {
    box-shadow: 0 2px 10px var(--oc-btn-violet-shadow) !important;
}

.oc-btn-shadow-purple {
    box-shadow: 0 2px 10px var(--oc-btn-purple-shadow) !important;
}

.oc-btn-shadow-teal {
    box-shadow: 0 2px 10px var(--oc-btn-teal-shadow) !important;
}

.oc-btn-shadow-sky {
    box-shadow: 0 2px 10px var(--oc-btn-sky-shadow) !important;
}

.oc-btn-shadow-indigo {
    box-shadow: 0 2px 10px var(--oc-btn-indigo-shadow) !important;
}

.oc-btn-shadow-emerald {
    box-shadow: 0 2px 10px var(--oc-btn-emerald-shadow) !important;
}

.oc-btn-shadow-amber {
    box-shadow: 0 2px 10px var(--oc-btn-amber-shadow) !important;
}

.oc-tab-active-rose {
    background-color: var(--oc-tab-rose-bg) !important;
    border-color: var(--oc-tab-rose-border) !important;
    color: var(--oc-tab-rose-text) !important;
}

.oc-badge-rose {
    background-color: var(--oc-badge-rose-bg) !important;
    border-color: var(--oc-badge-rose-border) !important;
    color: var(--oc-badge-rose-text) !important;
}

.oc-btn-shadow-rose {
    box-shadow: 0 2px 10px var(--oc-btn-rose-shadow) !important;
}

/* ── green (成功/已完成) ── */
:root {
    --oc-badge-green-bg: rgba(34, 197, 94, 0.20);
    --oc-badge-green-border: rgba(34, 197, 94, 0.30);
    --oc-badge-green-text: #86EFAC;
    /* green-300 */
}

[data-theme="light"] {
    --oc-badge-green-bg: #D1FAE5;
    /* green-100 */
    --oc-badge-green-border: #6EE7B7;
    /* green-300 */
    --oc-badge-green-text: #065F46;
    /* green-800 */
}

.oc-badge-green {
    background-color: var(--oc-badge-green-bg) !important;
    border-color: var(--oc-badge-green-border) !important;
    color: var(--oc-badge-green-text) !important;
}

/* ── red (失败/错误) ── */
:root {
    --oc-badge-red-bg: rgba(239, 68, 68, 0.20);
    --oc-badge-red-border: rgba(239, 68, 68, 0.30);
    --oc-badge-red-text: #FCA5A5;
    /* red-300 */
}

[data-theme="light"] {
    --oc-badge-red-bg: #FEE2E2;
    /* red-100 */
    --oc-badge-red-border: #FCA5A5;
    /* red-300 */
    --oc-badge-red-text: #991B1B;
    /* red-800 */
}

.oc-badge-red {
    background-color: var(--oc-badge-red-bg) !important;
    border-color: var(--oc-badge-red-border) !important;
    color: var(--oc-badge-red-text) !important;
}

/* ── yellow (警告/处理中，复用 amber 的 token，单独映射) ── */
.oc-badge-yellow {
    background-color: var(--oc-badge-amber-bg) !important;
    border-color: var(--oc-badge-amber-border) !important;
    color: var(--oc-badge-amber-text) !important;
}

/* ── peer-comparison 结果卡 Token（同行业数据对比 — _pcShowResult） ── */
:root {
    --pc-result-bg: rgba(6, 78, 59, 0.70);
    /* emerald-900/70 */
    --pc-result-border: rgba(4, 120, 87, 0.50);
    /* emerald-600/50 */
    --pc-result-title: #6EE7B7;
    /* emerald-300   */
    --pc-result-desc: #D1D5DB;
    /* gray-300      */
    --pc-result-value: #FFFFFF;
    /* white         */
}

[data-theme="light"] {
    --pc-result-bg: #D1FAE5;
    /* emerald-100   */
    --pc-result-border: #6EE7B7;
    /* emerald-300   */
    --pc-result-title: #065F46;
    /* emerald-900   */
    --pc-result-desc: #374151;
    /* gray-700      */
    --pc-result-value: #111827;
    /* gray-900      */
}

/* ── cyan (工具提示/信息卡片) ── */
:root {
    --oc-badge-cyan-bg: rgba(6, 182, 212, 0.20);
    --oc-badge-cyan-border: rgba(6, 182, 212, 0.30);
    --oc-badge-cyan-text: #67E8F9;
    /* cyan-300 */
}

[data-theme="light"] {
    --oc-badge-cyan-bg: #CFFAFE;
    /* cyan-100 */
    --oc-badge-cyan-border: #67E8F9;
    /* cyan-300 */
    --oc-badge-cyan-text: #164E63;
    /* cyan-900 */
}

.oc-badge-cyan {
    background-color: var(--oc-badge-cyan-bg) !important;
    border-color: var(--oc-badge-cyan-border) !important;
    color: var(--oc-badge-cyan-text) !important;
}

/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   功能卡片底部操作行：主操作 + 开始新任务
   ─────────────────────────────────────────────
   用法：
     <div class="oc-action-row">
         <div class="xx-submit-area"><button class="xx-submit-btn w-full ...">主操作</button></div>
         <button class="oc-new-task-btn" onclick="XxxModule._startNewTask(this)">＋ 开始新任务</button>
     </div>
   行为：
     - 「开始新任务」由各模块 _startNewTask(btn) 实现：移除当前卡片 +
       清空已上传文件 + 重新渲染同一功能的空白卡片，不回欢迎页
     - 进度条出现时（提交后），右侧按钮通过 :has() 自动隐藏，恢复全宽
     - 上传/执行失败若 submit-area 留下「重试」按钮，右侧仍保留可用
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */

.oc-action-row {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 0.75rem;
    align-items: stretch;
}

.oc-action-row > * {
    min-width: 0;
}

:root {
    --oc-new-task-bg: rgba(255, 255, 255, 0.05);
    --oc-new-task-bg-hover: rgba(255, 255, 255, 0.10);
    --oc-new-task-border: rgba(255, 255, 255, 0.10);
    --oc-new-task-text: rgba(156, 163, 175, 1);
}

[data-theme="light"] {
    --oc-new-task-bg: rgba(15, 23, 42, 0.04);
    --oc-new-task-bg-hover: rgba(15, 23, 42, 0.08);
    --oc-new-task-border: rgba(15, 23, 42, 0.12);
    --oc-new-task-text: rgba(71, 85, 105, 1);
}

.oc-new-task-btn {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 0.5rem;
    width: 100%;
    padding: 0.75rem 1rem;
    font-size: 0.875rem;
    line-height: 1.25rem;
    border-radius: 0.75rem;
    background: var(--oc-new-task-bg);
    border: 1px solid var(--oc-new-task-border);
    color: var(--oc-new-task-text);
    cursor: pointer;
    transition: all 0.2s ease;
    white-space: nowrap;
}

.oc-new-task-btn:hover {
    background: var(--oc-new-task-bg-hover);
}

/* ─────────────────────────────────────────────
   提交后进入「执行中」状态：
   submit-area 被进度条 / 错误重试按钮 innerHTML 替换。
   此时让左侧吃满整行，右侧「开始新任务」隐藏，
   恢复成进度条全宽的视觉。
   触发条件：submit-area 内含以下任一进度元素
     .up-progress          — 共享 upload-progress.js
     [class*="-progress"]  — bc/cf/bf/bgm/bfr/ic/jm/ipdp/fsc/ltb/rr/rp/trr 等
                              各模块内联执行进度条（命名约定：xxx-progress）
   ───────────────────────────────────────────── */
.oc-action-row:has(.up-progress),
.oc-action-row:has([class*="-progress"]) {
    grid-template-columns: 1fr;
}

.oc-action-row:has(.up-progress) > .oc-new-task-btn,
.oc-action-row:has([class*="-progress"]) > .oc-new-task-btn {
    display: none;
}

/*
使用方法：

// 获取当前主题
const theme = document.documentElement.getAttribute('data-theme') || 'dark';

// 切换主题
function setTheme(theme) {
    document.documentElement.setAttribute('data-theme', theme);
    localStorage.setItem('opencpai-theme', theme);
}

// 初始化（从 localStorage 读取）
const savedTheme = localStorage.getItem('opencpai-theme') || 'dark';
setTheme(savedTheme);
*/