
  * { -webkit-font-smoothing: antialiased; }

  /* ================================================================
   *  V80 设计令牌 (Design Tokens) — 双主题
   *  参考 Flowith 克制风格 · 2026-03-28
   * ================================================================ */

  /* ── 暗色主题（默认） ── */
  :root {
    --sidebar-w: 16rem;

    /* 背景 */
    --color-bg-canvas:    #161616;
    --color-bg-card:      rgba(255, 255, 255, 0.05);
    --color-bg-elevated:  rgba(255, 255, 255, 0.08);
    --color-bg-menu:      #252525;

    /* 文字 */
    --color-text-primary:    #ededf0;
    --color-text-secondary:  rgba(255, 255, 255, 0.7);
    --color-text-tertiary:   rgba(255, 255, 255, 0.5);

    /* 边框 */
    --color-border:       rgba(255, 255, 255, 0.1);
    --color-border-focus: rgba(255, 255, 255, 0.3);
    --color-bg-bar:       rgba(22, 22, 22, 0.92);
    --color-border-bar:   rgba(255, 255, 255, 0.08);

    /* Accent */
    --color-accent:        #7788ff;
    --color-accent-rgb:    119, 136, 255;
    --color-accent-hover:  #8899ff;
    --color-accent-bg:     rgba(119, 136, 255, 0.12);
    --color-accent-subtle:rgba(119, 136, 255, 0.06);
    --color-detail-surface: rgba(255, 255, 255, 0.045);
    --color-detail-surface-strong: rgba(255, 255, 255, 0.065);
    --color-control-surface: rgba(255, 255, 255, 0.028);
    --color-control-surface-hover: rgba(255, 255, 255, 0.055);
    --color-detail-border: rgba(255, 255, 255, 0.085);
    --color-detail-border-strong: rgba(119, 136, 255, 0.34);

    /* 语义色 */
    --color-success:        #30d158;
    --color-success-text:   rgba(48, 209, 88, 0.8);
    --color-success-bg:     rgba(48, 209, 88, 0.12);
    --color-warning:        #ff9f0a;
    --color-warning-text:   rgba(255, 159, 10, 0.8);
    --color-warning-bg:     rgba(255, 159, 10, 0.12);
    --color-error:          #ff453a;
    --color-error-text:     rgba(255, 69, 58, 0.8);
    --color-error-bg:       rgba(255, 69, 58, 0.12);
    --color-success-border: rgba(52, 199, 89, 0.3);
    --color-warning-border: rgba(255, 159, 10, 0.3);
    --color-error-border:   rgba(255, 69, 58, 0.3);
    --color-error-border-light: rgba(255, 69, 58, 0.2);
    --color-error-subtle:   rgba(255, 69, 58, 0.08);
    --color-warning-subtle: rgba(255, 159, 10, 0.08);
    --color-info-bg:        rgba(0, 113, 227, 0.08);
    --color-info-border:    rgba(0, 113, 227, 0.2);

    /* 特殊 */
    --color-overlay:       rgba(0, 0, 0, 0.7);
    --color-img-modal-bg:  rgba(0, 0, 0, 0.88);
    --color-img-btn-bg:    rgba(255, 255, 255, 0.12);
    --color-img-btn-text:  #f5f5f7;
    --color-img-arrow:     white;
    --color-badge-warn:    #fde047;
    --color-purple:        #bf5af2;
    --color-info:          #64d2ff;
    --color-info-alt-bg:   rgba(100, 210, 255, 0.12);   /* help 图标背景（青色 tint，区别于 --color-info-bg 的 Apple 蓝） */
    --color-purple-bg:     rgba(191, 90, 242, 0.12);     /* help 紫色图标背景，与 success/warning/error 的 -bg 0.12 模式一致 */
    --color-status-blue:   #409cff;

    /* Landing page 光晕 */
    --color-orb-primary:   rgba(119, 136, 255, 0.35);
    --color-orb-secondary: rgba(99, 102, 241, 0.25);
    --color-orb-tertiary:  rgba(191, 90, 242, 0.18);

    /* Pricing / Help 页装饰 glow (不随主题变,保持蓝调一致) */
    --color-orb-glow-strong: rgba(119, 136, 255, 0.25);  /* pricing 主光晕 */
    --color-orb-glow-bright: rgba(119, 136, 255, 0.2);   /* help 次光晕 */
    --color-orb-glow-soft:   rgba(119, 136, 255, 0.15);  /* pricing 次光晕 */

    /* Preview (访客登录页) */
    --color-overlay-preview: rgba(0, 0, 0, 0.55);        /* 遮罩层 */
    --color-shadow-preview:  rgba(0, 0, 0, 0.3);         /* 卡片阴影 */

    /* Landing nav scrolled 背景 */
    --color-landing-nav-bg: rgba(22, 22, 22, 0.72);

    /* 下拉面板/菜单统一玻璃背景 (.refimg-label-menu / .batch-panel / .bp-menu) */
    --color-glass-panel-bg: rgba(30, 30, 30, 0.98);

    /* Accent 阴影 */
    --color-accent-shadow:       rgba(119, 136, 255, 0.2);
    --color-accent-shadow-hover: rgba(119, 136, 255, 0.3);

    /* 图片叠加层（Gallery 覆盖在图片上，确保可读） */
    --color-overlay-strong: rgba(0, 0, 0, 0.82);
    --color-overlay-medium: rgba(0, 0, 0, 0.28);
    --color-overlay-light:  rgba(0, 0, 0, 0.4);
    --color-overlay-light-hover: rgba(0, 0, 0, 0.6);

    /* 图片上文字（白色，确保在暗色图片上可读，不随主题变） */
    --color-on-image:       rgba(255, 255, 255, 0.85);
    --color-on-image-muted: rgba(255, 255, 255, 0.6);
    --color-on-image-dim:   rgba(255, 255, 255, 0.4);

    /* 图片上边框 */
    --color-image-border:       rgba(255, 255, 255, 0.2);
    --color-image-border-light: rgba(255, 255, 255, 0.14);

    /* Gallery badge */
    --color-gallery-badge-border: rgba(119, 136, 255, 0.15);

    /* Card hover 阴影 */
    --color-shadow-card-hover: rgba(0, 0, 0, 0.2);

    /* z-index 层级 */
    --z-banner:    40;     /* 顶部 sticky header / critical banner */
    --z-overlay:   50;     /* sidebar backdrop / dim overlay */
    --z-dropdown:  8000;   /* 下拉菜单（lang-menu 等） */
    --z-modal:     9000;   /* 模态框、固定底栏 */
    --z-modal-top: 9200;   /* 模态之上的模态：confirm/prompt/下载范围/批量预检等顶层对话框，永远盖住普通 modal */
    --z-toast:     9500;   /* toast 通知 */
    --z-img-modal: 300;    /* 图片预览：盖住侧栏项目头(app-shell 201)/项目面板(200)/底栏，让位给 ctx 菜单(500)、下拉(8000)、顶层对话框(9200)、toast(9500)——淘汰原因菜单/忙提示会从预览内弹出，必须压过预览 */

    /* 阴影 */
    --shadow-sm:       0 1px 3px rgba(0, 0, 0, 0.3);
    --shadow-md:       0 4px 16px rgba(0, 0, 0, 0.4);
    --shadow-lg:       0 12px 48px rgba(0, 0, 0, 0.5);
    --shadow-elevated: 0 24px 72px rgba(0, 0, 0, 0.6);
    --shadow-focus:    0 0 0 2px var(--color-accent);

    /* 毛玻璃 */


    /* 圆角 */
    --radius-sm: 6px;
    --radius-md: 8px;
    --radius-lg: 12px;
    --radius-xl: 24px;

    /* Modal 宽度尺度（替代散落的 w-[360px]/w-[400px]/w-[480px]/w-[560px]/w-[600px]） */
    --modal-w-xs: 360px;
    --modal-w-sm: 400px;
    --modal-w-md: 480px;
    --modal-w-lg: 560px;
    --modal-w-xl: 640px;

    /* 字号 */
    --font-xs:      11px;
    --font-sm:      12px;
    --font-md:      13px;
    --font-base:    14px;
    --font-lg:      16px;
    --font-xl:      18px;
    --font-2xl:     22px;
    --font-3xl:     28px;
    --font-display: 40px;

    /* 品牌渐变（极简,仅 logo / hero accent 单点使用,不再大面积装饰） */
    --brand-gradient-subtle: linear-gradient(135deg, var(--color-accent) 0%, #9bb0ff 100%);

    /* 间距 */
    --space-xs:  4px;
    --space-sm:  8px;
    --space-md:  12px;
    --space-lg:  16px;
    --space-xl:  24px;
    --space-2xl: 32px;


    /* 过渡 */
    --transition-fast:   150ms ease;
    --transition-normal: 250ms ease;

    /* 前景色（替代硬编码 #fff/#000） */
    --color-on-accent:    #f5f5f7;
    --color-on-overlay:   #f5f5f7;
    --color-on-dark:      #f5f5f7;
    --color-on-success:   #f5f5f7;
    /* F-10: 图片覆盖层专用文本色/成本渐变品牌色 */
    --color-on-image:     #ffffff;
    --color-on-image-contrast: #111111;
    --color-cost-gradient-start: #f59e0b;
    --color-cost-gradient-end:   #ea580c;

    color-scheme: dark;
  }

  /* ── 亮色主题 ── */
  [data-theme="light"] {
    --color-bg-canvas:    #f5f5f7;
    --color-bg-card:      #ffffff;
    --color-bg-elevated:  rgba(0, 0, 0, 0.04);
    --color-bg-menu:      #ffffff;

    --color-text-primary:    #1d1d1f;
    --color-text-secondary:  rgba(0, 0, 0, 0.55);
    --color-text-tertiary:   rgba(0, 0, 0, 0.35);

    --color-border:       rgba(0, 0, 0, 0.1);
    --color-border-focus: rgba(0, 0, 0, 0.25);
    --color-bg-bar:       rgba(255, 255, 255, 0.92);
    --color-border-bar:   rgba(0, 0, 0, 0.08);

    --color-accent:        #6366f1;
    --color-accent-rgb:    99, 102, 241;
    --color-accent-hover:  #4f46e5;
    --color-accent-bg:     rgba(99, 102, 241, 0.1);
    --color-accent-subtle:rgba(99, 102, 241, 0.05);
    --color-detail-surface: #ffffff;
    --color-detail-surface-strong: rgba(99, 102, 241, 0.055);
    --color-control-surface: rgba(0, 0, 0, 0.022);
    --color-control-surface-hover: rgba(0, 0, 0, 0.045);
    --color-detail-border: rgba(0, 0, 0, 0.085);
    --color-detail-border-strong: rgba(99, 102, 241, 0.32);

    --color-success:        #16a34a;
    --color-success-text:   rgba(22, 163, 74, 0.85);
    --color-success-bg:     rgba(22, 163, 74, 0.1);
    --color-warning:        #d97706;
    --color-warning-text:   rgba(217, 119, 6, 0.85);
    --color-warning-bg:     rgba(217, 119, 6, 0.1);
    --color-error:          #dc2626;
    --color-error-text:     rgba(220, 38, 38, 0.85);
    --color-error-bg:       rgba(220, 38, 38, 0.1);
    --color-success-border: rgba(22, 163, 74, 0.3);
    --color-warning-border: rgba(217, 119, 6, 0.3);
    --color-error-border:   rgba(220, 38, 38, 0.3);
    --color-error-border-light: rgba(220, 38, 38, 0.2);
    --color-error-subtle:   rgba(220, 38, 38, 0.06);
    --color-warning-subtle: rgba(217, 119, 6, 0.06);
    --color-info-bg:        rgba(0, 113, 227, 0.06);
    --color-info-border:    rgba(0, 113, 227, 0.15);

    --color-overlay:       rgba(0, 0, 0, 0.4);
    --color-img-modal-bg:  rgba(255, 255, 255, 0.92);
    --color-img-btn-bg:    rgba(0, 0, 0, 0.08);
    --color-img-btn-text:  #1d1d1f;
    --color-img-arrow:     #1d1d1f;
    --color-badge-warn:    #ca8a04;
    --color-purple:        #9333ea;
    --color-info:          #0284c7;
    --color-status-blue:   #409cff;
    --color-landing-nav-bg: rgba(245, 245, 247, 0.72);
    --color-glass-panel-bg: rgba(255, 255, 255, 0.98);

    --shadow-sm:       0 1px 2px rgba(0, 0, 0, 0.06), 0 1px 3px rgba(0, 0, 0, 0.1);
    --shadow-md:       0 4px 6px rgba(0, 0, 0, 0.07), 0 10px 20px rgba(0, 0, 0, 0.1);
    --shadow-lg:       0 8px 24px rgba(0, 0, 0, 0.08), 0 16px 48px rgba(0, 0, 0, 0.1);
    --shadow-elevated: 0 16px 48px rgba(0, 0, 0, 0.1), 0 24px 72px rgba(0, 0, 0, 0.12);
    --shadow-focus:    0 0 0 2px var(--color-accent);

    /* 前景色（亮色主题） */
    --color-on-accent:    #ffffff;
    --color-on-overlay:   #1d1d1f;
    --color-on-dark:      #1d1d1f;
    --color-on-success:   #ffffff;
    /* F-10: 图片覆盖层专用文本色/成本渐变品牌色(亮色主题同值) */
    --color-on-image:     #ffffff;
    --color-on-image-contrast: #111111;
    --color-cost-gradient-start: #f59e0b;
    --color-cost-gradient-end:   #ea580c;

    color-scheme: light;
  }

  /* ── 亮色主题图片预览覆盖 ── */
  [data-theme="light"] #img-modal { background: rgba(255, 255, 255, 0.92) !important; }
  [data-theme="light"] #img-modal button[style*="background"] { background: rgba(0, 0, 0, 0.08) !important; }
  [data-theme="light"] #img-modal button[style*="color"] { color: #1d1d1f !important; }
  #img-modal .img-modal-stage { max-width:calc(100vw - 112px); max-height:90vh; }
  #img-modal .img-modal-main { min-width:0; }
  #preview-resolution {
    min-height:24px;
    max-width:calc(100vw - 48px);
    margin-top:8px;
    padding:5px 11px;
    display:inline-flex;
    align-items:center;
    justify-content:center;
    border:1px solid var(--color-detail-border);
    border-radius:999px;
    background:var(--color-img-btn-bg);
    color:var(--color-text-secondary);
    font-size:12px;
    line-height:1.2;
    letter-spacing:0;
    white-space:nowrap;
    overflow:hidden;
    text-overflow:ellipsis;
  }
  #preview-resolution:empty { visibility:hidden; }
  #preview-resolution.loading { color:var(--color-text-tertiary); }
  [data-theme="light"] #preview-resolution {
    background:rgba(0,0,0,0.06);
    border-color:rgba(0,0,0,0.08);
    color:#515154;
  }
  #ref-compare-side { min-width:0; }
  #ref-compare-list .ref-compare-img { max-width:30vw; max-height:60vh; border:1px solid var(--color-border); }
  .img-modal-status {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: min(360px, 72vw);
    padding: 14px 16px;
    border: 1px solid var(--color-border);
    border-radius: 14px;
    background: var(--color-bg-card);
    color: var(--color-text-secondary);
    box-shadow: var(--shadow-md);
    text-align: center;
    font-size: 14px;
    line-height: 1.55;
    z-index: 2;
  }
  #img-modal-src.img-modal-image-error {
    min-width: min(420px, 72vw);
    min-height: 280px;
    opacity: 0;
  }

  /* ── 亮色主题滚动条适配 ── */
  [data-theme="light"] ::-webkit-scrollbar-thumb { background: rgba(0, 0, 0, 0.15); }
  [data-theme="light"] ::-webkit-scrollbar-thumb:hover { background: rgba(0, 0, 0, 0.25); }

  /* ── 选中文字 ── */
  ::selection { background: var(--color-accent-bg); color: var(--color-text-primary); }

  /* ── 以下是原有样式（暂未替换变量） ── */

  body { background: var(--color-bg-canvas); color: var(--color-text-primary); font-family: -apple-system, 'Helvetica Neue', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', system-ui, sans-serif; }
  .card { background: var(--color-detail-surface); border: 1px solid var(--color-detail-border); border-radius: 14px; }
  .btn-primary { background: rgba(255,255,255,0.1); color: var(--color-text-primary); border-radius: 6px; padding: 10px 24px; font-weight: 500; cursor: pointer; transition: all 0.2s ease; border: 1px solid var(--color-border); font-size: 14px; display: inline-flex; align-items: center; justify-content: center; gap: 6px; }
  .btn-primary:hover { background: rgba(255,255,255,0.15); }
  .btn-primary:disabled { background: rgba(82,82,82,0.1); color: var(--color-text-tertiary); cursor: not-allowed; border-color: transparent; }
  .btn-ghost { background: transparent; border: none; color: var(--color-text-secondary); border-radius: 6px; padding: 8px 16px; cursor: pointer; transition: all 0.2s ease; font-size: 14px; display: inline-flex; align-items: center; justify-content: center; gap: 6px; }
  .btn-ghost:hover { color: var(--color-text-primary); background: var(--color-bg-elevated); }
  .btn-sm { padding: 4px 8px; font-size: 12px; white-space: nowrap; }
  /* ── 项目上下文容器 ── */
  .project-context { flex-shrink:0; position:relative; border-bottom:1px solid var(--color-border); }
  /* ── 项目头（有项目时显示） ── */
  .project-header { display:flex; align-items:center; padding:0 6px 0 12px; border-bottom:1px solid var(--color-border); }
  .project-header.hidden { display:none; }
  .project-header-name { display:flex; align-items:center; gap:6px; flex:1; min-width:0; min-height:36px; padding:0; background:none; border:none; cursor:pointer; text-align:left; color:var(--color-text-primary); transition:opacity .15s; }
  .project-header-name:hover { opacity:.8; }
  .project-header-name-text { font-size:14px; font-weight:600; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; flex:1; min-width:0; }
  .project-header-actions { display:flex; align-items:center; gap:2px; flex-shrink:0; margin-left:auto; }
  /* ── Drop zone：完整态（无项目） ── */
  .drop-zone-full { padding:20px 12px; display:flex; flex-direction:column; align-items:center; gap:8px; border:1px dashed rgba(255,255,255,0.1); border-radius:var(--radius-md); margin:10px 12px; transition:all .2s ease; }
  .drop-zone-full.drag-over { border-color:var(--color-accent); background:var(--color-accent-subtle); }
  .dz-full-content { display:flex; flex-direction:column; align-items:center; gap:6px; }
  .drop-zone-icon { color:var(--color-text-tertiary); flex-shrink:0; }
  .dz-full-label { font-size:12px; color:var(--color-text-secondary); white-space:nowrap; }
  .dz-full-sublabel { font-size:11px; color:var(--color-text-tertiary); white-space:nowrap; }
  .dz-full-actions { display:flex; gap:6px; margin-top:4px; }
  .drop-zone-btn { display:inline-flex; align-items:center; gap:4px; font-size:11px; padding:4px 10px; border-radius:var(--radius-sm); border:1px solid var(--color-border); background:transparent; color:var(--color-text-secondary); cursor:pointer; transition:all .15s; white-space:nowrap; }
  .drop-zone-btn:hover { color:var(--color-text-primary); background:var(--color-bg-elevated); }
  .drop-zone-btn.primary { border-color:rgba(119,136,255,0.4); color:var(--color-accent); }
  .drop-zone-btn.primary:hover { background:var(--color-accent-bg); }
  /* ── Drop zone：内联态（有项目，追加款式） ── */
  .drop-zone-inline { padding:7px 12px; margin:0; border:none; border-radius:0; display:flex; cursor:pointer; transition:background .15s; }
  .drop-zone-inline:hover { background:var(--color-bg-elevated); }
  .drop-zone-inline.drag-over { background:var(--color-accent-subtle); }
  .dz-inline-content { display:flex; align-items:center; gap:8px; width:100%; }
  .dz-inline-content.hidden { display:none; }
  .dz-inline-label { font-size:12px; color:var(--color-text-tertiary); white-space:nowrap; }
  /* ── 当前项目款式筛选 ── */
  .item-list-header-actions { display:flex; align-items:center; gap:2px; }
  .item-list-header-actions .batch-switcher-icon-btn { width:24px; height:24px; }
  .item-filter-search-toggle.hidden { display:none; }
  .item-filter-search-toggle.is-active { background:var(--color-accent-subtle); color:var(--color-accent); }
  .item-filter-search-toggle:focus-visible { outline:2px solid var(--color-accent); outline-offset:1px; }
  .item-filter-bar { flex-shrink:0; display:grid; gap:6px; padding:0 10px 9px; border-bottom:1px solid var(--color-border); }
  .item-filter-bar.hidden,
  body.left-rail-collapsed .item-filter-bar { display:none; }
  .item-filter-search { position:relative; display:flex; align-items:center; }
  .item-filter-search.hidden { display:none; }
  .item-filter-search > svg { position:absolute; left:9px; color:var(--color-text-tertiary); pointer-events:none; }
  .item-filter-search input[type=search] { width:100%; height:30px; padding:0 30px; border:1px solid var(--color-detail-border); border-radius:var(--radius-md); background:var(--color-control-surface); color:var(--color-text-primary); font:inherit; font-size:12px; outline:none; appearance:none; transition:background .15s ease,border-color .15s ease; }
  .item-filter-search input[type=search]::-webkit-search-cancel-button { display:none; -webkit-appearance:none; appearance:none; }
  .item-filter-search input[type=search]::placeholder { color:var(--color-text-tertiary); }
  .item-filter-search input[type=search]:hover { background:var(--color-control-surface-hover); border-color:var(--color-border-focus); }
  .item-filter-search input[type=search]:focus { background:var(--color-accent-subtle); border-color:var(--color-detail-border-strong); }
  .item-filter-search-clear { position:absolute; right:4px; width:24px; height:24px; display:flex; align-items:center; justify-content:center; padding:0; border:0; border-radius:var(--radius-sm); background:transparent; color:var(--color-text-tertiary); cursor:pointer; }
  .item-filter-search-clear.hidden { display:none; }
  .item-filter-search-clear:hover,
  .item-filter-search-clear:focus-visible { background:var(--color-control-surface-hover); color:var(--color-text-primary); outline:none; }
  .item-filter-meta { display:flex; align-items:center; justify-content:space-between; gap:8px; min-width:0; }
  .item-filter-meta select { width:auto; min-width:104px; height:28px; padding:0 25px 0 9px; border-radius:var(--radius-sm); font-size:11px; background-position:right 8px center; }
  .item-filter-count { min-width:0; overflow:hidden; color:var(--color-text-tertiary); font-size:11px; line-height:1.3; text-align:right; text-overflow:ellipsis; white-space:nowrap; }
  .item-filter-empty { display:flex; min-height:150px; padding:28px 16px; flex-direction:column; align-items:center; justify-content:center; gap:12px; text-align:center; }
  .item-filter-empty-title { color:var(--color-text-tertiary); font-size:12px; }
  .item-filter-empty button { padding:5px 10px; border:1px solid var(--color-detail-border); border-radius:var(--radius-sm); background:var(--color-control-surface); color:var(--color-accent); font:inherit; font-size:11px; font-weight:600; cursor:pointer; }
  .item-filter-empty button:hover,
  .item-filter-empty button:focus-visible { background:var(--color-accent-subtle); border-color:var(--color-detail-border-strong); outline:none; }
  /* ── 上传中 ── */
  .drop-zone.dz-loading { pointer-events:none; opacity:.7; }
  .drop-zone.dz-loading .dz-full-content,
  .drop-zone.dz-loading .dz-inline-content { display:none; }
  .dz-loading-indicator { display:none; align-items:center; gap:8px; padding:4px 0; }
  .drop-zone.dz-loading .dz-loading-indicator { display:flex; }
  .item-row { cursor: pointer; transition: all 0.2s ease; border-radius: 6px; margin: 2px 6px; }
  .item-row:hover { background: var(--color-bg-elevated); }
  .item-row.active { background: rgba(var(--color-accent-rgb),0.1); }
  .item-row .flex-1.min-w-0 > .flex { min-width: 0; overflow: hidden; }
  .truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .status-badge { font-size: 11px; padding: 3px 10px; border-radius: 20px; font-weight: 500; letter-spacing: 0.02em; display: inline-flex; align-items: center; gap: 4px; }
  .s-running { background: var(--color-accent-bg); color: var(--color-text-secondary); }
  .s-done { background: var(--color-success-bg); color: var(--color-success-text); }
  .s-error { background: var(--color-error-bg); color: var(--color-error-text); }
  .s-pending { background: rgba(82,82,82,0.15); color: var(--color-text-tertiary); }
  .s-analyzing { background: var(--color-accent-bg); color: var(--color-text-secondary); }
  .s-generating { background: var(--color-accent-bg); color: var(--color-text-secondary); }
  .s-partial { background: var(--color-warning-bg); color: var(--color-warning-text); }
  @keyframes spin{to{transform:rotate(360deg)}}
  .item-retry-btn { display: inline-flex; align-items: center; gap: 3px; padding: 2px 8px; border-radius: var(--radius-md); font-size: 11px; font-weight: 500; background: rgba(255,69,58,0.1); color: var(--color-error); cursor: pointer; transition: all .15s; user-select: none; }
  .item-retry-btn:hover { background: rgba(255,69,58,0.2); }

  .item-actions-wrap { position: relative; }
  .item-actions-row {
    display: grid;
    grid-template-columns: minmax(120px, 0.92fr) minmax(156px, 1.08fr);
    gap: 10px;
    align-items: stretch;
  }
  .item-actions-row.has-left-action {
    gap: 6px;
    padding: 5px;
    border: 1px solid rgba(255,255,255,0.08);
    border-radius: 8px;
    background: rgba(255,255,255,0.025);
  }
  .card > .item-actions-wrap .item-actions-row.has-left-action {
    padding: 0;
    border: none;
    background: transparent;
  }
  .item-actions-left,
  .item-actions-right { min-width: 0; display: flex; }
  .item-primary-action,
  .item-secondary-action,
  .item-tertiary-action {
    width: 100%;
    min-height: 38px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 5px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    border-radius: 6px;
    font-weight: 500;
    letter-spacing: 0;
    transition: background .16s ease, border-color .16s ease, color .16s ease, box-shadow .16s ease, transform .16s ease;
  }
  .item-primary-action {
    border-color: rgba(119,136,255,0.3);
    background: rgba(119,136,255,0.17);
    color: var(--color-text-primary);
    box-shadow: inset 0 1px 0 rgba(255,255,255,0.05), 0 8px 18px rgba(0,0,0,0.1);
  }
  .item-primary-action:hover {
    border-color: rgba(119,136,255,0.48);
    background: rgba(119,136,255,0.22);
    box-shadow: inset 0 1px 0 rgba(255,255,255,0.07), 0 10px 22px rgba(0,0,0,0.14);
  }
  .item-secondary-action {
    border: 1px solid transparent;
    background: transparent;
    color: var(--color-text-secondary);
  }
  .item-secondary-action:hover {
    border-color: rgba(255,255,255,0.12);
    color: var(--color-text-primary);
    background: rgba(255,255,255,0.04);
  }
  .item-tertiary-action {
    border: 1px solid transparent;
    background: transparent;
    color: var(--color-text-tertiary);
    font-weight: 400;
  }
  .item-tertiary-action:hover {
    color: var(--color-text-secondary);
    background: rgba(255,255,255,0.035);
  }
  .item-secondary-action.c-err {
    border-color: rgba(255,69,58,0.16);
    background: rgba(255,69,58,0.04);
  }
  .item-secondary-action.c-err:hover {
    border-color: rgba(255,69,58,0.28);
    background: rgba(255,69,58,0.08);
  }
  /* 取消生成按钮 — 更显眼的 pill 按钮 + stop 图标 */
  .btn-cancel-gen {
    display: inline-flex; align-items: center; gap: 5px;
    padding: 5px 14px; border-radius: var(--radius-lg);
    font-size: 13px; font-weight: 500; line-height: 1.4;
    border: 1.5px solid rgba(255,69,58,0.32);
    color: var(--color-error);
    background: transparent; cursor: pointer;
    transition: all .15s;
  }
  .btn-cancel-gen:hover {
    background: var(--color-error);
    color: var(--color-on-accent);
    border-color: var(--color-error);
  }
  [data-theme="light"] .btn-cancel-gen {
    border-color: rgba(220,38,38,0.28);
    color: var(--color-error);
  }
  [data-theme="light"] .btn-cancel-gen:hover {
    background: var(--color-error);
    color: var(--color-on-accent);
  }
  /* 生图请求已全部发出、取消已无意义时,取代取消按钮的只读"等结果"提示(非交互) */
  .gen-sent-waiting {
    display: inline-flex; align-items: center; gap: 5px;
    padding: 5px 12px; border-radius: var(--radius-lg);
    font-size: 13px; font-weight: 500; line-height: 1.4;
    color: var(--color-status-blue);
    background: var(--color-info-bg);
    border: 1px solid transparent;
    cursor: default;
  }
  .gen-sent-waiting svg { flex-shrink: 0; opacity: .85; }
  .item-primary-action[disabled],
  .item-primary-action.cursor-not-allowed {
    border-color: transparent;
    background: rgba(255,255,255,0.035);
    box-shadow: none;
  }
  .item-generate-icon {
    flex: 0 0 auto;
    color: var(--color-accent);
    opacity: .92;
    margin-right: 1px;
  }
  .item-credit-icon {
    flex: 0 0 auto;
    color: var(--color-warning);
    margin-left: -1px;
  }
  .item-action-sep {
    color: var(--color-text-tertiary);
    font-weight: 400;
  }
  [data-theme="light"] .item-actions-row.has-left-action {
    border-color: rgba(0,0,0,0.08);
    background: rgba(0,0,0,0.025);
  }
  [data-theme="light"] .item-primary-action {
    border-color: rgba(99,102,241,0.25);
    background: rgba(99,102,241,0.09);
    box-shadow: inset 0 1px 0 rgba(255,255,255,0.75), 0 6px 16px rgba(99,102,241,0.08);
  }
  [data-theme="light"] .item-primary-action:hover {
    border-color: rgba(99,102,241,0.38);
    background: rgba(99,102,241,0.13);
  }
  [data-theme="light"] .item-secondary-action {
    border-color: transparent;
    background: transparent;
  }
  [data-theme="light"] .item-secondary-action:hover {
    border-color: rgba(0,0,0,0.1);
    background: rgba(255,255,255,0.68);
  }
  [data-theme="light"] .item-tertiary-action:hover {
    background: rgba(0,0,0,0.035);
  }
  [data-theme="light"] .item-primary-action[disabled],
  [data-theme="light"] .item-primary-action.cursor-not-allowed {
    background: rgba(0,0,0,0.04);
  }
  .item-actions-placeholder { width: 100%; min-height: 38px; }
  .item-more-link {
    display: inline-flex;
    margin-top: 6px;
    padding: 3px 0;
    background: transparent;
    border: none;
    color: var(--color-text-tertiary);
    font-size: 12px;
    cursor: pointer;
  }
  .item-more-link:hover { color: var(--color-text-secondary); }
  .item-more-panel {
    margin-top: 6px;
    width: min(220px, 100%);
    padding: 6px;
    background: var(--color-bg-menu);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    box-shadow: 0 12px 30px rgba(0,0,0,0.22);
  }
  .item-more-menu-btn {
    width: 100%;
    display: flex;
    align-items: center;
    justify-content: flex-start;
    padding: 8px 10px;
    border: 0;
    border-radius: var(--radius-sm);
    background: transparent;
    color: var(--color-text-secondary);
    font-size: 12px;
    cursor: pointer;
  }
  .item-more-menu-btn:hover { background: var(--color-bg-elevated); color: var(--color-text-primary); }
  .item-more-divider { height: 1px; background: var(--color-border); margin: 4px 2px; }
  @media (max-width: 480px) {
    .item-actions-row { gap: 8px; }
    .item-primary-action,
    .item-secondary-action {
      min-height: 40px;
      padding-left: 10px;
      padding-right: 10px;
      font-size: 13px;
    }
  }

  .sync-settings-row { margin-top: 8px; }
  .sync-panel {
    margin-top: 6px;
    padding: 10px;
    background: rgba(255,255,255,0.03);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
  }
  .sync-card-grid {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    max-height: 160px;
    overflow-y: auto;
    scrollbar-width: thin;
    scrollbar-color: rgba(255,255,255,0.1) transparent;
  }
  .sync-card-grid::-webkit-scrollbar { width: 4px; }
  .sync-card-grid::-webkit-scrollbar-track { background: transparent; }
  .sync-card-grid::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.1); border-radius: 2px; }
  .sync-card {
    display: flex;
    align-items: center;
    gap: 6px;
    padding: 4px 6px 4px 4px;
    background: rgba(255,255,255,0.04);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-sm);
    cursor: pointer;
    transition: all .15s;
    user-select: none;
  }
  .sync-card:has(input:checked) { border-color: var(--color-accent); background: rgba(119,136,255,0.08); }
  .sync-card input[type="checkbox"] { width: 13px; height: 13px; accent-color: var(--color-accent); cursor: pointer; flex-shrink: 0; margin-left: 4px; }
  .sync-card-thumb {
    width: 36px;
    height: 36px;
    border-radius: 4px;
    object-fit: cover;
    flex-shrink: 0;
  }
  .sync-card-thumb-empty {
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--color-text-tertiary);
    background: rgba(255,255,255,0.05);
  }
  .sync-card-name {
    font-size: 11px;
    color: var(--color-text-secondary);
    max-width: 60px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .sync-panel-note {
    margin-top: 8px;
    color: var(--color-text-tertiary);
    font-size: 11px;
    line-height: 1.5;
  }
  .sync-domain {
    display: flex;
    align-items: center;
    gap: 6px;
    min-height: 32px;
    padding: 7px 8px;
    border: 1px solid var(--color-border);
    border-radius: var(--radius-sm);
    background: rgba(255,255,255,0.035);
    color: var(--color-text-secondary);
    font-size: 12px;
    cursor: pointer;
    user-select: none;
  }
  .sync-domain:has(input:checked) {
    border-color: rgba(119,136,255,0.55);
    background: rgba(119,136,255,0.1);
    color: var(--color-text-primary);
  }
  .sync-domain input {
    width: 13px;
    height: 13px;
    accent-color: var(--color-accent);
  }
  #overall-progress { display: none !important; }
  .progress-bar { height: 2px; background: var(--color-bg-elevated); border-radius: 1px; overflow: hidden; }
  .progress-fill { height: 100%; background: var(--color-accent); transition: width 0.5s ease; }
  .result-img { width: 100%; aspect-ratio: 3/4; object-fit: cover; border-radius: 12px; cursor: pointer; }
  .app-toast-region {
    --toast-bottom: 24px;
    position: fixed;
    bottom: var(--toast-bottom);
    left: 50%;
    transform: translateX(-50%);
    width: min(480px, calc(100vw - 24px));
    display: flex;
    flex-direction: column-reverse;
    align-items: center;
    gap: 8px;
    z-index: var(--z-toast);
    pointer-events: none;
  }
  .app-toast {
    display: flex;
    align-items: center;
    gap: 6px;
    max-width: 100%;
    box-sizing: border-box;
    padding: 12px 24px;
    border-radius: var(--radius-lg);
    background: var(--color-bg-menu);
    color: var(--color-text-primary);
    box-shadow: var(--shadow-md);
    font-size: 14px;
    line-height: 1.5;
    text-align: center;
    overflow-wrap: anywhere;
    z-index: var(--z-toast);
    pointer-events: none;
    transition: opacity 200ms ease;
  }
  .app-toast.is-leaving { opacity: 0; }
  .item-submit-progress { width: 12px; height: 12px; flex-shrink: 0; }
  .ref-generation-advice { margin-top: 8px; color: var(--color-text-secondary); font-size: 12px; line-height: 1.5; }

  .modal-overlay { position: fixed; inset: 0; background: var(--color-overlay); z-index: var(--z-modal); display: flex; align-items: flex-start; justify-content: center; overflow: auto; backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); }
  .modal-box { align-self: center; }
  .modal-box { background: var(--color-bg-card); border-radius: 12px; max-width: 90vw; max-height: 90vh; overflow: auto; width: min(90vw, 100%); box-sizing: border-box; }
  .download-scope-box { width:min(92vw, 420px); padding:20px; border:1px solid var(--color-border); box-shadow:0 18px 60px rgba(0,0,0,0.38); }
  .download-scope-head { display:flex; align-items:flex-start; justify-content:space-between; gap:16px; margin-bottom:16px; }
  .download-scope-title { margin:0; color:var(--color-text-primary); font-size:18px; line-height:1.25; font-weight:700; letter-spacing:0; }
  .download-scope-sub { margin:6px 0 0; color:var(--color-text-secondary); font-size:13px; line-height:1.55; max-width:34ch; }
  .download-scope-close { width:30px; height:30px; flex:0 0 auto; display:flex; align-items:center; justify-content:center; border:1px solid var(--color-border); border-radius:var(--radius-md); background:var(--color-control-surface); color:var(--color-text-secondary); cursor:pointer; transition:background .16s ease,color .16s ease,border-color .16s ease; }
  .download-scope-close:hover, .download-scope-close:focus-visible { background:var(--color-control-surface-hover); color:var(--color-text-primary); border-color:var(--color-detail-border-strong); outline:none; }
  .download-scope-options { display:grid; gap:10px; }
  .download-scope-option { width:100%; min-height:74px; display:grid; grid-template-columns:1fr auto; align-items:center; gap:4px 12px; padding:13px 14px; border:1px solid var(--color-detail-border); border-radius:var(--radius-lg); background:var(--color-control-surface); color:var(--color-text-primary); text-align:left; cursor:pointer; transition:background .16s ease,border-color .16s ease,transform .16s ease; }
  .download-scope-option:hover, .download-scope-option:focus-visible { background:var(--color-accent-subtle); border-color:var(--color-detail-border-strong); transform:translateY(-1px); outline:none; }
  .download-scope-option:disabled { cursor:not-allowed; opacity:.54; transform:none; background:var(--color-bg-elevated); border-color:var(--color-border); }
  .download-scope-option-title { font-size:14px; line-height:1.25; font-weight:650; color:var(--color-text-primary); }
  .download-scope-option-meta { grid-column:1; color:var(--color-text-tertiary); font-size:12px; line-height:1.35; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; min-width:0; }
  .download-scope-option-count { grid-row:1 / span 2; grid-column:2; justify-self:end; color:var(--color-accent); font-size:13px; font-weight:650; white-space:nowrap; }
  .download-scope-option:disabled .download-scope-option-count { color:var(--color-text-tertiary); }
  .download-scope-foot { display:flex; justify-content:flex-end; margin-top:16px; }
  @media (max-width: 480px) {
    .download-scope-box { width:min(calc(100vw - 24px), 420px); padding:16px; }
    .download-scope-head { gap:12px; margin-bottom:14px; }
    .download-scope-title { font-size:17px; line-height:1.3; }
    .download-scope-sub { max-width:none; font-size:13px; line-height:1.6; }
    .download-scope-close { width:36px; height:36px; }
    .download-scope-option {
      min-height:78px;
      grid-template-columns:minmax(0, 1fr);
      gap:5px;
      padding:12px;
    }
    .download-scope-option-meta {
      white-space:normal;
      overflow-wrap:anywhere;
    }
    .download-scope-option-count {
      grid-row:auto;
      grid-column:1;
      justify-self:start;
    }
  }
  .asset-tab { background:transparent; border:none; color:var(--color-text-tertiary); border-radius:6px; padding:6px 14px; cursor:pointer; font-size:13px; transition:all 0.2s; }
  .asset-tab:hover { color:var(--color-text-primary); background:var(--color-bg-elevated); }
  .asset-tab.active { color:var(--color-text-primary); background:var(--color-bg-elevated); }
  input[type=text]:not(.item-name-input), input[type=number], textarea { background: var(--color-control-surface); border: 1px solid var(--color-detail-border); border-radius: var(--radius-md); color: var(--color-text-primary); padding: 10px 14px; width: 100%; outline: none; transition: all 0.2s ease; font-size: 14px; }
  input[type=text]:focus, input[type=number]:focus, textarea:focus { box-shadow: none; border-color: var(--color-detail-border-strong); background: var(--color-accent-subtle); outline: none; }
  input[type=text]::placeholder { color: var(--color-text-tertiary); }
  select { background: var(--color-control-surface); border: 1px solid var(--color-detail-border); border-radius: var(--radius-md); color: var(--color-text-primary); padding: 10px 14px; width: 100%; outline: none; outline-style: none; outline-width: 0; outline-color: transparent; transition: all 0.2s ease; font-size: 14px; cursor: pointer; -webkit-appearance: none; appearance: none; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='%236e6e73' viewBox='0 0 16 16'%3E%3Cpath d='M8 11L3 6h10z'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 12px center; color-scheme: dark; }
  select:hover, input[type=text]:not(.item-name-input):hover, input[type=number]:hover, textarea:hover { border-color: var(--color-border-focus); background-color: var(--color-control-surface-hover); }
  select:focus, select:focus-visible { box-shadow: none; border-color: var(--color-detail-border-strong); background-color: var(--color-accent-subtle); outline: none; outline-style: none; outline-width: 0; outline-color: transparent; }
  [data-theme="light"] select { background-color: var(--color-control-surface); color: var(--color-text-primary); color-scheme: light; }
  [data-theme="light"] select option { background-color: var(--color-bg-card); color: var(--color-text-primary); color-scheme: light; }
  ::-webkit-scrollbar { width: 6px; } ::-webkit-scrollbar-track { background: transparent; } ::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.1); border-radius: 3px; }
  ::-webkit-scrollbar-thumb:hover { background: var(--color-text-tertiary); }
  .refimg-drop-zone { border: 1px solid var(--color-detail-border); border-radius: 12px; padding: 10px; min-height: 104px; display: flex; flex-wrap: wrap; gap: 8px; align-items: flex-start; align-content: flex-start; transition: all 0.3s ease; background: var(--color-control-surface); box-shadow: inset 0 1px 0 rgba(255,255,255,0.025); }
  .refimg-empty-upload { width:100%; min-height:132px; border:1px dashed rgba(119,136,255,0.45); border-radius:var(--radius-lg); background:rgba(119,136,255,0.07); color:var(--color-text-secondary); display:flex; flex-direction:column; align-items:center; justify-content:center; gap:6px; cursor:pointer; font:inherit; text-align:center; transition:background .16s ease,border-color .16s ease,color .16s ease,transform .16s ease; }
  .refimg-empty-upload:hover, .refimg-empty-upload:focus-visible { border-color:var(--color-detail-border-strong); background:var(--color-accent-subtle); color:var(--color-text-primary); transform:translateY(-1px); }
  .refimg-empty-plus { width:34px; height:34px; border-radius:50%; display:flex; align-items:center; justify-content:center; background:rgba(119,136,255,0.16); color:var(--color-accent); font-size:28px; line-height:1; font-weight:300; }
  .refimg-empty-title { font-size:13px; font-weight:650; color:var(--color-text-primary); }
  .refimg-empty-desc { font-size:12px; color:var(--color-text-tertiary); }
  .refimg-label { position:absolute; bottom:2px; right:2px; font-size:9px; padding:3px 6px; min-height:20px; border-radius:4px; cursor:pointer; line-height:1.3; font-weight:500; white-space:nowrap; z-index:12; pointer-events:auto; transition:all 0.15s; background:rgba(0,0,0,0.6); color: var(--color-on-image); display:inline-flex; align-items:center; gap:2px; }
  .refimg-label:hover { background:rgba(0,0,0,0.8); }
  .refimg-label.unlabeled { background:var(--color-accent); color:var(--color-on-image); animation:label-pulse 2s ease-in-out 3; font-size:10px; padding:4px 8px; will-change:opacity; }
  @keyframes label-pulse { 0%,100% { opacity:1; } 50% { opacity:0.6; } }
  .refimg-label-menu { position:fixed; color: var(--color-on-dark); border:1px solid rgba(255,255,255,0.1); border-radius:6px; padding:4px 0; z-index:var(--z-dropdown); min-width:80px; box-shadow:0 8px 24px rgba(0,0,0,0.6); pointer-events:auto; }
  .refimg-label-menu div { padding:7px 12px; font-size:12px; cursor:pointer; color:inherit; white-space:nowrap; display:flex; align-items:center; gap:6px; }
  .refimg-label-menu div:hover { background:rgba(255,255,255,0.1); }
  [data-theme="light"] .refimg-label-menu { background:rgba(255,255,255,0.98) !important; color:#1d1d1f !important; border:1px solid rgba(0,0,0,0.1); box-shadow:0 8px 24px rgba(0,0,0,0.12); }
  [data-theme="light"] .refimg-label-menu div:hover { background:rgba(0,0,0,0.06); }
  .refimg-drop-zone.drag-over { border-color: var(--color-detail-border-strong); background: var(--color-accent-subtle); box-shadow: inset 0 0 0 1px rgba(119,136,255,0.12); }
  .outfit-guide-tag.tag-scene { background:rgba(52,199,89,0.16); color:var(--color-success); }
.refimg-upload-hint { display:flex; align-items:center; gap:8px; color:var(--color-text-secondary); font-size:12px; padding:4px 0; }
.refimg-card.uploading { position:relative; }
  .refimg-card.is-deleting { opacity:.55; pointer-events:none; }
  .visual-ref-role-note { margin:10px 0 0; padding:8px 10px; border:1px solid var(--color-detail-border); border-radius:var(--radius-sm); background:var(--color-bg-elevated); color:var(--color-text-secondary); font-size:12px; line-height:1.55; }
  .spinner { border: 2px solid rgba(255,255,255,0.1); border-top-color: var(--color-accent); border-radius: 50%; animation: spin 0.8s linear infinite; display: inline-block; vertical-align: middle; will-change: transform; }
  .result-card { position: relative; transition: all 0.2s ease; border-radius: 12px; overflow: hidden; will-change: transform, opacity; }
  .result-card.selected { box-shadow: 0 0 0 2px rgba(48,209,88,0.4); }
  .result-card.rejected { opacity: 0.3; transform: scale(0.96); }
  .result-failed-action,
  .result-failed-wait {
    min-height: 30px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 5px;
    margin-top: 2px;
    padding: 0 10px;
    border-radius: var(--radius-sm);
    font-size: 12px;
    font-weight: 700;
    line-height: 1;
    white-space: nowrap;
  }
  .result-failed-toggle {
    display: inline;
    margin: 0;
    padding: 0;
    border: 0;
    background: transparent;
    color: var(--color-error-text);
    font: inherit;
    font-weight: 600;
    cursor: pointer;
  }
  .result-failed-toggle:hover,
  .result-failed-toggle:focus-visible {
    color: var(--color-error);
    text-decoration: underline;
    outline: none;
  }
  .result-failed-bulk {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 5px;
    min-height: 26px;
    margin-left: 6px;
    padding: 0 8px;
    border: 1px solid rgba(119, 136, 255, 0.42);
    border-radius: var(--radius-sm);
    background: var(--color-accent-subtle);
    color: var(--color-text-primary);
    font-size: 12px;
    font-weight: 700;
    line-height: 1;
    cursor: pointer;
  }
  .result-failed-bulk:hover {
    border-color: var(--color-detail-border-strong);
    background: var(--color-control-surface-hover);
  }
  .result-failed-list {
    display: flex;
    flex-direction: column;
    gap: 6px;
    margin: 0 0 12px;
  }
  .result-failed-list[hidden] {
    display: none;
  }
  .result-failed-row {
    display: flex;
    align-items: center;
    gap: 10px;
    min-height: 40px;
    padding: 8px 10px;
    border: 1px solid var(--color-error-border-light);
    border-radius: var(--radius-md);
    background: var(--color-error-subtle);
  }
  .result-failed-row-slot {
    flex: 0 0 auto;
    color: var(--color-text-secondary);
    font-size: 11px;
    font-weight: 700;
    white-space: nowrap;
  }
  .result-failed-row-error {
    flex: 1 1 auto;
    min-width: 0;
    color: var(--color-text-secondary);
    font-size: 12px;
    line-height: 1.4;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .result-failed-row .result-failed-action,
  .result-failed-row .result-failed-wait {
    width: auto;
    flex: 0 0 auto;
    margin-top: 0;
  }
  .result-failed-action {
    border: 1px solid rgba(119, 136, 255, 0.42);
    background: var(--color-accent-subtle);
    color: var(--color-text-primary);
    cursor: pointer;
    transition: background .15s, border-color .15s, transform .15s;
  }
  .result-failed-action:hover {
    border-color: var(--color-detail-border-strong);
    background: var(--color-control-surface-hover);
    transform: translateY(-1px);
  }
  .result-failed-wait {
    border: 1px solid var(--color-detail-border);
    background: var(--color-control-surface);
    color: var(--color-text-tertiary);
  }
  .result-source-action-row {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 6px;
  }
  .result-source-btn {
    min-width: 0;
    min-height: 30px;
    border: 1px solid var(--color-border);
    border-radius: var(--radius-sm);
    background: var(--color-bg-elevated);
    color: var(--color-text-secondary);
    font-size: 11px;
    font-weight: 650;
    line-height: 1.15;
    padding: 0 6px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    cursor: pointer;
  }
  .result-source-btn.active {
    border-color: var(--color-accent);
    background: var(--color-accent-subtle);
    color: var(--color-text-primary);
  }
  .result-source-btn:hover {
    border-color: var(--color-accent);
  }
  .result-card .card-actions { position: absolute; top: 8px; right: 8px; z-index: 8; display: flex; gap: 4px; opacity: 0; transition: opacity 0.2s ease; }
  .result-card:hover .card-actions { opacity: 1; }
  .result-card.selected .card-actions,
  .result-card.rejected .card-actions { opacity: 1; }
  .card-btn { width: 30px; height: 30px; border-radius: 6px; display: flex; align-items: center; justify-content: center; font-size: 14px; cursor: pointer; border: none; transition: all 0.2s ease; }
  .card-btn-select { background: rgba(48,209,88,0.15); color: rgba(48,209,88,0.8); }
  .card-btn-select:hover { background: rgba(48,209,88,0.3); }
  .card-btn-select.active { background: var(--color-success); color: var(--color-text-primary); opacity: 1 !important; }
  .card-btn-reject { background: rgba(255,69,58,0.15); color: var(--color-error-text); }
  .card-btn-reject:hover { background: rgba(255,69,58,0.3); }
  .card-btn-reject.active { background: var(--color-error); color: var(--color-on-dark); opacity: 1 !important; }
  .card-btn-delete { background: var(--color-error-bg); color: rgba(255,69,58,0.6); }
  .card-btn-delete:hover { background: rgba(255,69,58,0.25); }
  .card-btn-note { background: var(--color-warning-bg); color: var(--color-warning); }
  .card-btn-note:hover { background: var(--color-warning-border); }
  /* 结果图客户备注徽标: 有备注时常驻可见(不等 hover), 点击打开备注弹窗 */
  .result-note-badge { position: absolute; left: 10px; bottom: 22px; z-index: 2; display: flex; align-items: center; gap: 4px; max-width: calc(100% - 20px); padding: 3px 8px; border: none; border-radius: var(--radius-sm); background: var(--color-overlay); color: var(--color-warning); font-size: 11px; font-weight: 600; cursor: pointer; }
  .result-note-badge svg { flex-shrink: 0; }
  .result-note-badge span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .result-card .card-actions .card-btn-select.active,
  .result-card .card-actions .card-btn-reject.active { opacity: 1; }
  .item-name-input { background: transparent; border: none; box-shadow: 0 0 0 1px var(--color-accent-bg); border-radius: 6px; color: var(--color-text-primary); padding: 2px 6px; font-size: 13px; font-weight: 500; outline: none; }
  .item-row[draggable=true] { cursor: grab; }
  .item-row.dragging { opacity: 0.3; }
  .item-row.drag-over { border-top: 2px solid var(--color-accent); }
  .ctx-menu { position: fixed; background: var(--color-bg-menu); border: 1px solid var(--color-border); border-radius: 6px; padding: 4px 0; z-index: 500; min-width: 120px; box-shadow: var(--shadow-md); }
  .ctx-menu div { padding: 6px 14px; font-size: 13px; color: var(--color-text-primary); cursor: pointer; }
  .ctx-menu div:hover { background: rgba(119,136,255,0.15); }
  .ctx-menu div.danger { color: var(--color-error-text); }
  .ctx-menu div.danger:hover { background: rgba(255,69,58,0.15); }
  .result-reject-reason-menu { width: 188px; padding: 6px; display: grid; gap: 2px; z-index: var(--z-dropdown); }
  .ctx-menu .result-reject-reason-title { padding: 7px 9px 6px; color: var(--color-text-tertiary); cursor: default; font-size: 11px; font-weight: 700; }
  .ctx-menu .result-reject-reason-title:hover { background: transparent; }
  .result-reject-reason-option { width: 100%; min-height: 32px; padding: 0 9px; border: 0; border-radius: var(--radius-sm); background: transparent; color: var(--color-text-primary); font: inherit; font-size: 12px; text-align: left; cursor: pointer; }
  .result-reject-reason-option:hover,
  .result-reject-reason-option:focus-visible { background: var(--color-control-surface-hover); outline: none; }
  .preview-nav { position: absolute; top: 50%; transform: translateY(-50%); background: var(--color-bg-elevated); color: var(--color-text-secondary); border: none; font-size: 28px; padding: 12px 16px; cursor: pointer; border-radius: 6px; transition: all 0.2s ease; z-index: 51; }
  .preview-nav:hover { background: var(--color-accent-bg); color: var(--color-text-primary); }
  .result-card.selected .card-actions .card-btn-select,
  .result-card.rejected .card-actions .card-btn-reject { opacity: 1; }
  @media (hover: none) {
    .result-card .card-actions { opacity: 1; }
  }
  .result-toolbar { display: flex; align-items: center; justify-content: flex-end; gap: 8px; flex-wrap: wrap; }
  .result-toolbar-group {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 4px;
    border-radius: var(--radius-md);
    border: 1px solid var(--color-detail-border);
    background: var(--color-control-surface);
    box-shadow: inset 0 1px 0 rgba(255,255,255,0.02);
  }
  .result-toolbar-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 4px;
    height: 28px;
    padding: 0 11px;
    border: none;
    border-radius: 999px;
    background: transparent;
    color: var(--color-text-tertiary);
    font-size: 12px;
    font-weight: 600;
    line-height: 1;
    white-space: nowrap;
    cursor: pointer;
    transition: background .15s, color .15s;
  }
  .result-toolbar-btn:hover { background: var(--color-bg-elevated); color: var(--color-text-primary); }
  .result-toolbar-btn.active { background: var(--color-bg-elevated); color: var(--color-text-secondary); }
  .result-toolbar-btn:disabled {
    opacity: 0.45;
    cursor: not-allowed;
    background: transparent;
    color: var(--color-text-tertiary);
  }
  .result-toolbar-btn:disabled:hover { background: transparent; color: var(--color-text-tertiary); }
  .result-toolbar-select {
    min-width: 116px;
    width: auto;
    height: 28px;
    padding: 0 24px 0 10px;
    border-radius: 999px;
    border: 1px solid transparent;
    background-color: transparent;
    color: var(--color-text-secondary);
    font-size: 12px;
    font-weight: 500;
    line-height: 1;
    cursor: pointer;
    -webkit-appearance: none;
    appearance: none;
    background-position: right 8px center;
    background-size: 10px;
  }
  .result-toolbar-select:hover { border-color: var(--color-border); background-color: var(--color-bg-elevated); }
  .result-toolbar-select:focus, .result-toolbar-select:focus-visible { border-color: var(--color-border-focus); background-color: var(--color-bg-elevated); outline: none; }
  .result-toolbar-select option { background: var(--color-bg-card); color: var(--color-text-primary); }
  .result-toolbar-action {
    height: 28px;
    padding: 0 11px;
    border: 1px solid var(--color-detail-border);
    border-radius: 999px;
    background: var(--color-control-surface);
  }
  .batch-bar { position: fixed; bottom: 0; left: var(--sidebar-w); right: 0; background: var(--color-bg-bar); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); padding: 11px 28px; padding-bottom: calc(11px + env(safe-area-inset-bottom, 0px)); display: flex; align-items: center; justify-content: space-between; z-index: 40; border-top: 1px solid var(--color-border-bar); border-bottom-left-radius: 0; border-top-left-radius: 0; }
  #main-layout.tool-dock-open ~ #batch-bar { right: clamp(380px, 27vw, 440px); }
  /* 交付栏是 fixed 悬浮,不进文档流:详情面板(结果区滚动容器)桌面端只有 p-8=32px 底衬,
     而栏高是 65px(11 + 交付动作盒 42 + 11 + 1 边框;触屏按钮 44px 时 75px),
     滚到底仍会把结果区最后一行的「加入详情页/加入视频」按钮压在栏下、滚不出来。
     栏可见时补足栏高 + 呼吸位;栏隐藏或详情页/视频视图不加空白。 */
  body:has(#batch-bar:not(.hidden)) #detail-panel { padding-bottom: 100px; }
  .batch-bar-actions { display: flex; align-items: center; justify-content: flex-end; gap: 8px; flex-wrap: wrap; }
  .batch-delivery-actions {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 3px;
    border: 1px solid rgba(255,255,255,0.08);
    border-radius: 8px;
    background: rgba(255,255,255,0.025);
  }
  .batch-bar-action {
    width: auto;
    min-width: 132px;
    min-height: 34px;
    padding: 0 14px;
    font-size: 13px;
  }
  .batch-bar-action svg { flex: 0 0 auto; }
  @media (hover: none) {
    .batch-bar-action { min-height: 44px; }
  }
  .batch-bar-action-primary[disabled] {
    border-color: transparent;
    background: rgba(255,255,255,0.035);
    box-shadow: none;
  }
  #bar-gen-all-reason {
    display: none !important;
  }
  [data-theme="light"] .batch-delivery-actions {
    border-color: rgba(0,0,0,0.08);
    background: rgba(0,0,0,0.025);
  }
  .batch-bar-info-pill {
    display: inline-flex;
    align-items: center;
    min-height: 28px;
    padding: 0 12px;
    border-radius: 999px;
    border: 1px solid var(--color-detail-border);
    background: var(--color-control-surface);
    color: var(--color-text-secondary);
    font-size: 12px;
    font-weight: 600;
    white-space: nowrap;
  }
  .batch-preflight-toggle {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    min-height: 34px;
    padding: 0 10px;
    border-radius: var(--radius-md);
    border: 1px solid var(--color-detail-border);
    background: var(--color-control-surface);
    color: var(--color-text-secondary);
    font-size: 12px;
    font-weight: 700;
    cursor: pointer;
    user-select: none;
    transition: background var(--transition-fast), color var(--transition-fast), border-color var(--transition-fast);
  }
  .batch-preflight-toggle:hover {
    background: var(--color-control-surface-hover);
    color: var(--color-text-primary);
    border-color: var(--color-border-focus);
  }
  .batch-preflight-toggle input,
  .batch-preflight-footer-toggle input {
    width: 14px;
    height: 14px;
    margin: 0;
    accent-color: var(--color-accent);
  }
  .batch-preflight-box {
    width: min(820px, calc(100vw - 48px));
    max-height: 86vh;
    padding: 0;
    overflow: hidden;
    background: var(--color-glass-panel-bg);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-lg);
    box-shadow: 0 24px 80px rgba(0, 0, 0, 0.42);
  }
  .batch-preflight-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    padding: 20px 22px 16px;
    border-bottom: 1px solid var(--color-border);
  }
  .batch-preflight-title {
    margin: 0;
    font-size: 18px;
    font-weight: 700;
    color: var(--color-text-primary);
  }
  .batch-preflight-sub {
    margin: 5px 0 0;
    font-size: 13px;
    color: var(--color-text-secondary);
    line-height: 1.5;
  }
  .batch-preflight-close {
    flex: 0 0 auto;
    width: 34px;
    height: 34px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border: 1px solid var(--color-detail-border);
    border-radius: var(--radius-md);
    background: var(--color-control-surface);
    color: var(--color-text-secondary);
    cursor: pointer;
    transition: background var(--transition-fast), color var(--transition-fast), border-color var(--transition-fast);
  }
  .batch-preflight-close:hover {
    background: var(--color-control-surface-hover);
    color: var(--color-text-primary);
    border-color: var(--color-border-focus);
  }
  .batch-preflight-content {
    max-height: calc(86vh - 142px);
    overflow: auto;
    padding: 16px 22px 18px;
  }
  .batch-preflight-loading {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
    min-height: 180px;
    color: var(--color-text-secondary);
    font-size: 13px;
  }
  .batch-preflight-summary {
    display: grid;
    grid-template-columns: repeat(5, minmax(0, 1fr));
    gap: 8px;
    margin-bottom: 14px;
  }
  .batch-preflight-stat {
    min-width: 0;
    min-height: 70px;
    padding: 10px 12px;
    border-radius: var(--radius-md);
    border: 1px solid var(--color-detail-border);
    background: var(--color-control-surface);
  }
  .batch-preflight-stat span {
    display: block;
    margin-bottom: 6px;
    font-size: 11px;
    line-height: 1.25;
    color: var(--color-text-tertiary);
    overflow-wrap: anywhere;
  }
  .batch-preflight-stat strong {
    display: block;
    font-size: 20px;
    line-height: 1;
    color: var(--color-text-primary);
  }
  .batch-preflight-stat.ok strong { color: var(--color-success); }
  .batch-preflight-stat.hard strong { color: var(--color-error); }
  .batch-preflight-stat.warn strong { color: var(--color-warning); }
  .batch-preflight-section {
    margin-top: 14px;
    border-radius: var(--radius-md);
    border: 1px solid var(--color-detail-border);
    background: var(--color-control-surface);
    overflow: hidden;
  }
  .batch-preflight-section-title {
    padding: 10px 14px 10px 16px;
    border-bottom: 1px solid var(--color-detail-border);
    color: var(--color-text-primary);
    font-size: 12px;
    font-weight: 700;
  }
  .batch-preflight-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    min-height: 56px;
    padding: 10px 14px 10px 16px;
    border-bottom: 1px solid var(--color-detail-border);
  }
  .batch-preflight-row:hover { background: var(--color-control-surface-hover); }
  .batch-preflight-row:last-child { border-bottom: 0; }
  .batch-preflight-row-main {
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 3px;
  }
  .batch-preflight-row-main strong {
    color: var(--color-text-primary);
    font-size: 13px;
    font-weight: 700;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .batch-preflight-row-main span {
    color: var(--color-text-secondary);
    font-size: 12px;
    line-height: 1.45;
  }
  .batch-preflight-row.hard .batch-preflight-row-main span { color: var(--color-error-text); }
  .batch-preflight-row.warn .batch-preflight-row-main span { color: var(--color-warning-text); }
  .batch-preflight-link {
    flex: 0 0 auto;
    min-width: 72px;
    min-height: 34px;
    border: 1px solid var(--color-detail-border);
    background: var(--color-control-surface);
    color: var(--color-text-secondary);
    border-radius: var(--radius-md);
    padding: 6px 10px;
    font-size: 12px;
    font-weight: 700;
    cursor: pointer;
    transition: background var(--transition-fast), color var(--transition-fast), border-color var(--transition-fast);
  }
  .batch-preflight-link:hover {
    background: var(--color-control-surface-hover);
    color: var(--color-text-primary);
    border-color: var(--color-border-focus);
  }
  .batch-preflight-empty {
    padding: 24px 12px;
    text-align: center;
    color: var(--color-success-text);
    border: 1px solid var(--color-success-border);
    border-radius: var(--radius-md);
    background: var(--color-success-bg);
    font-size: 13px;
    font-weight: 700;
  }
  .batch-preflight-footer {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 10px;
    padding: 14px 22px;
    border-top: 1px solid var(--color-border);
    background: var(--color-glass-panel-bg);
  }
  .batch-preflight-footer .btn-primary {
    min-width: 260px;
    min-height: 44px;
    font-weight: 700;
    white-space: nowrap;
  }
  .batch-preflight-footer .btn-ghost {
    min-height: 40px;
    white-space: nowrap;
  }
  .batch-preflight-footer-toggle {
    margin-right: auto;
    display: inline-flex;
    align-items: center;
    gap: 7px;
    color: var(--color-text-secondary);
    font-size: 12px;
    font-weight: 700;
    cursor: pointer;
    user-select: none;
  }
  .section-label { font-size: 13px; color: var(--color-text-tertiary); font-weight: 500; margin-bottom: 6px; letter-spacing: 0.01em; }
  .refimg-header { display:flex; align-items:center; justify-content:space-between; margin-bottom:12px; gap:8px; }
  .refimg-title { font-size:13px; color:var(--color-text-tertiary); font-weight:500; }
  .refimg-actions { display:flex; align-items:center; gap:6px; }
  .refimg-action-btn { display:inline-flex; align-items:center; gap:4px; padding:5px 11px; border-radius:var(--radius-md); font-size:12px; font-weight:600; color:var(--color-text-secondary); background:var(--color-control-surface); border:1px solid var(--color-detail-border); cursor:pointer; transition:all .15s; }
  .refimg-action-btn:hover { background:var(--color-control-surface-hover); border-color:var(--color-border-focus); color:var(--color-text-primary); }
  .refimg-action-btn.primary { color:var(--color-text-secondary); }
  .refimg-action-btn.primary:hover { background:var(--color-control-surface-hover); color:var(--color-text-primary); }
  .refimg-action-btn.asset-lib-btn { color:var(--color-accent); background:var(--color-accent-subtle); border-color:rgba(119,136,255,0.18); font-weight:700; }
  .refimg-action-btn.asset-lib-btn:hover { background:var(--color-accent-bg); border-color:var(--color-detail-border-strong); }
  .refimg-card.labeling { animation: labelScan 1.5s ease-in-out infinite; will-change:opacity; }
  @keyframes labelScan { 0%,100% { opacity:1; } 50% { opacity:0.5; } }
  .labeling-progress { font-size:12px; color:var(--color-text-tertiary); text-align:center; margin-bottom:8px; animation: fadeIn 0.3s; }
  @keyframes fadeIn { from { opacity:0; transform:translateY(-4px); } to { opacity:1; transform:translateY(0); } }
  .card-menu { position:fixed; background:var(--color-bg-menu); border-radius:6px; padding:4px; min-width:140px; box-shadow:0 8px 32px rgba(0,0,0,0.6); z-index:60; border:1px solid var(--color-border); }
  .card-menu button { display:block; width:100%; text-align:left; padding:8px 14px; border:none; background:none; color:var(--color-text-primary); font-size:13px; border-radius:6px; cursor:pointer; transition:background 0.2s; }
  .card-menu button:hover { background:var(--color-bg-elevated); }
  .card-menu .danger { color:var(--color-error-text); }
  /* 工具结果面板 - V14 重设计 */
  .tool-panel { background:var(--color-bg-card); border:1px solid var(--color-border); border-radius:12px; padding:14px; margin-top:12px; }
  .tool-panel.collapsed { display:none; }
  .tool-panel-toggle { display:flex; align-items:center; gap:6px; margin-top:12px; padding:8px 14px; background:var(--color-bg-elevated); border:1px solid var(--color-border); border-radius:6px; color:var(--color-text-tertiary); font-size:13px; cursor:pointer; font-weight:500; transition:all 0.2s; }
  .tool-panel-toggle:hover { background:var(--color-bg-elevated); color:var(--color-text-primary); }
  .tool-panel-toggle .arrow { font-size:10px; transition:transform 0.2s; }
  .tool-panel-tabs { display:flex; align-items:center; gap:0; margin-bottom:12px; flex-wrap:wrap; }
  .tool-panel-tab { position:relative; padding:6px 14px; font-size:12px; font-weight:500; border:none; background:none; color:var(--color-text-tertiary); cursor:pointer; border-bottom:2px solid transparent; border-radius:6px 6px 0 0; transition:all 0.15s; display:inline-flex; align-items:center; gap:4px; white-space:nowrap; }
  .tool-panel-tab:hover { color:var(--color-text-primary); background:var(--color-bg-elevated); }
  .tool-panel-tab.active { color:var(--color-text-primary); font-weight:600; }
  .tool-panel-tab .tab-used-badge { position:absolute; top:-2px; right:-2px; min-width:14px; height:14px; border-radius:var(--radius-md); background:rgba(0,0,0,0.7); color:#4ade80; font-size:9px; font-weight:700; line-height:14px; text-align:center; padding:0 3px; z-index:2; pointer-events:none; }
  @keyframes slideDown { from { opacity:0; transform:translateY(-8px); } to { opacity:1; transform:translateY(0); } }
  .tool-panel-header { display:flex; align-items:center; justify-content:space-between; margin-bottom:12px; }
  .tool-panel-title { font-size:14px; font-weight:600; display:flex; align-items:center; gap:6px; }
  .tool-panel-close { background:none; border:none; color:var(--color-text-tertiary); cursor:pointer; font-size:18px; padding:2px 8px; border-radius:6px; line-height:1; }
  .tool-panel-close:hover { background:var(--color-bg-elevated); color:var(--color-text-primary); }
  .tool-progress { height:4px; background:var(--color-bg-elevated); border-radius:2px; overflow:hidden; margin:12px 0; }
  .tool-progress-bar { height:100%; background:var(--color-accent); border-radius:2px; transition:width 0.5s ease; }
  /* 工具面板大图对比 - V15 */
  .tool-compare {
    display: flex;
    gap: 16px;
    margin-top: 12px;
    padding: 12px;
    background: rgba(0,0,0,0.2);
    border-radius: 8px;
  }
  .tool-compare-item {
    flex: 1;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 8px;
  }
  .tool-compare-label {
    font-size: 11px;
    font-weight: 600;
    color: var(--color-text-tertiary);
    text-transform: uppercase;
    letter-spacing: 0.5px;
  }
  .tool-compare-img {
    width: 100%;
    max-width: 240px;
    height: auto;
    object-fit: cover;
    border-radius: 8px;
    border: 1px solid rgba(38,38,38,0.7);
    cursor: pointer;
  }
  .tool-compare-divider {
    display: flex;
    align-items: center;
    font-size: 24px;
    color: var(--color-text-secondary);
    font-weight: 300;
  }
  .tool-actions {
    display: flex;
    gap: 12px;
    margin-top: 16px;
  }
  .tool-btn-primary {
    flex: 1;
    padding: 10px 16px;
    font-size: 13px;
    font-weight: 500;
    border: none;
    border-radius: 6px;
    cursor: pointer;
    background: rgba(255,255,255,0.1);
    color: var(--color-text-primary);
    transition: all 0.2s;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
  }
  .tool-btn-primary:hover {
    background: rgba(255,255,255,0.15);
  }
  .tool-btn-secondary {
    flex: 1;
    padding: 10px 16px;
    font-size: 13px;
    font-weight: 500;
    border: none;
    border-radius: 6px;
    cursor: pointer;
    background: rgba(255,255,255,0.06);
    color: var(--color-text-secondary);
    transition: all 0.2s;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
  }
  .tool-btn-secondary:hover {
    background: rgba(255,255,255,0.1);
    color: var(--color-text-primary);
  }
  [data-theme="light"] .tool-btn-primary { background: rgba(0,0,0,0.06); }
  [data-theme="light"] .tool-btn-primary:hover { background: rgba(0,0,0,0.1); }
  [data-theme="light"] .tool-btn-secondary { background: rgba(0,0,0,0.04); }
  [data-theme="light"] .tool-btn-secondary:hover { background: rgba(0,0,0,0.08); }
  .tool-notice {
    margin-top: 12px;
    padding: 8px 12px;
    font-size: 11px;
    color: var(--color-text-tertiary);
    background: rgba(255,255,255,0.03);
    border-radius: 6px;
    text-align: center;
  }
  /* 对比预览弹窗 */
  .compare-overlay {
    position: fixed;
    inset: 0;
    z-index: 500;
    background: var(--color-overlay);
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    cursor: pointer;
  }
  .compare-overlay-content {
    display: flex;
    gap: 24px;
    max-width: 90vw;
    max-height: 85vh;
    align-items: center;
  }
  .compare-overlay-content img {
    max-width: 42vw;
    max-height: 80vh;
    object-fit: contain;
    border-radius: 8px;
  }
  .compare-overlay-label {
    text-align: center;
    font-size: 13px;
    color: var(--color-text-tertiary);
    margin-top: 8px;
    font-weight: 600;
  }
  .compare-overlay-close {
    position: absolute;
    top: 20px;
    right: 24px;
    background: rgba(255,255,255,0.1);
    border: none;
    color: var(--color-text-primary);
    font-size: 28px;
    width: 40px;
    height: 40px;
    border-radius: 50%;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
  }
  .compare-overlay-close:hover {
    background: rgba(255,255,255,0.2);
  }
  .compare-overlay-arrow {
    font-size: 32px;
    color: var(--color-text-secondary);
    flex-shrink: 0;
  }
  .tool-result-preview { width:80px; height:80px; object-fit:cover; border-radius:var(--radius-lg); border:1px solid var(--color-border); }
  /* refimg actions */
  /* 拍摄风格卡片 */

  /* ── Utility classes（减少 JS 模板内联 style） ── */
  .c-txt-sec { color: var(--color-text-secondary); }
  .c-txt-tri { color: var(--color-text-tertiary); }
  .c-txt { color: var(--color-text-primary); }
  .c-err { color: var(--color-error); }
  .c-ok { color: var(--color-success); }
  .va-mid { vertical-align: middle; }
  .va-mid-r4 { vertical-align: middle; }
  .mr4 { margin-right: 4px; }
  .ifx-va-mid-r4 { display: inline-flex; vertical-align: middle; margin-right: 4px; }
  .ifx-va-mid-r6 { display: inline-flex; vertical-align: middle; margin-right: 6px; }
  .fs11-sec { font-size: 11px; color: var(--color-text-secondary); }
  .fs11-tri { font-size: 11px; color: var(--color-text-tertiary); }
  .ml-auto-fs10 { margin-left: auto; font-size: 10px; }
  .wh20 { width: 20px; height: 20px; }
  .wh24 { width: 24px; height: 24px; }
  .wh16 { width: 16px; height: 16px; }
  .wh12-bw2 { width: 12px; height: 12px; border-width: 2px; }
  .c-warn-b { color: var(--color-warning); font-weight: 600; }
  .c-tri-lh17 { color: var(--color-text-tertiary); line-height: 1.7; }
  .c-sec-p4-10 { color: var(--color-text-secondary); padding: 4px 10px; }
  .bg-hi-pri { background: rgba(255,255,255,0.1); color: var(--color-text-primary); }
  .bg-acc-w { background: var(--color-accent); color: var(--color-on-dark); }
  .bg-card-pri { background: var(--color-control-surface-hover); color: var(--color-text-primary); border: 1px solid var(--color-detail-border); transition: all 0.15s ease; }
  .bg-card-pri:hover { background: var(--color-accent-subtle); border-color: var(--color-detail-border-strong); }
  .c-border-mx1 { color: var(--color-border); margin: 0 4px; }
  .bb-border { border-bottom: 1px solid var(--color-border); }
  .bt-border-pt16 { border-top: 1px solid var(--color-border); padding-top: 16px; }
  .c-warn { color: var(--color-warning); }
  .ifx { display: inline-flex; }
  .bg-subtle { background: rgba(255,255,255,0.03); }
  .z100 { z-index: var(--z-modal-top); } /* 顶层对话框层（legacy 类名，实际值见 --z-modal-top）：confirm/prompt/下载范围/批量预检/视频预览/详情页选择器，确保盖住普通 modal */
  .bg-card { background: var(--color-bg-card); }
  .bd-border { border: 1px solid var(--color-border); }
  .c-blue { color: var(--color-status-blue); }
  .bt-border { border-top: 1px solid var(--color-border); }
  .p-2-4 { padding: 2px 4px; }
  .p-2-6 { padding: 2px 6px; }
  .p-4-8 { padding: 4px 8px; }
  .p-4-10 { padding: 4px 10px; }
  .p-4-12 { padding: 4px 12px; }
  .p-6 { padding: 6px; }
  .p-6-8 { padding: 6px 8px; }
  .p-6-10 { padding: 6px 10px; }
  .p-12-16 { padding: 12px 16px; }
  .pt-16 { padding-top: 16px; }
  .mt-8 { margin-top: 8px; }
  .ml-auto { margin-left: auto; }
  .mx-1 { margin: 0 4px; }

  /* 积分流水行：描述可能含长串，左列必须可收缩换行，金额列不可被挤出可视区 */
  .credit-log-row { gap: 12px; }
  .credit-log-main { min-width: 0; overflow-wrap: anywhere; }
  .credit-log-amount { flex-shrink: 0; }

/* 批D AI模特库卡片(复用 .asset-lib-card 基样式) */
.model-new-card { display:flex; align-items:center; justify-content:center; border:2px dashed var(--color-border); background:var(--color-bg-card); color:var(--color-text-secondary); }
.model-new-card:hover { border-color:var(--color-accent); color:var(--color-accent); }
.model-new-inner { display:flex; flex-direction:column; align-items:center; gap:8px; font-size:13px; text-align:center; padding:8px; }
.model-card .model-card-name { position:absolute; left:0; right:0; bottom:0; padding:6px 8px; font-size:12px; color:var(--color-on-image); background:var(--color-overlay-light); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.model-state-face { position:absolute; inset:0; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:10px; font-size:13px; color:var(--color-text-secondary); background:var(--color-bg-card); text-align:center; padding:8px; box-sizing:border-box; }
.model-failed-face { color:var(--color-warning); }
.model-spinner { width:28px; height:28px; border:3px solid var(--color-border); border-top-color:var(--color-accent); border-radius:50%; animation:model-spin 0.8s linear infinite; }
@keyframes model-spin { to { transform:rotate(360deg); } }

  /* 定制模特：描述常显，次要参数并排。 */
  .opt-person-guide { display:grid; gap:12px; margin-top:16px; }
  .opt-person-hint, .opt-person-output-note { margin:0; color:var(--color-text-secondary); font-size:12px; line-height:1.6; }
  .opt-person-description textarea { display:block; width:100%; }
  .opt-person-options { display:grid; grid-template-columns:minmax(120px,1fr) minmax(80px,1fr); gap:16px; margin-top:16px; margin-bottom:16px; }
  .opt-person-options .section-label { margin-bottom:8px; font-size:12px; }
  #style-section .opt-person-resolution-label { display:flex; align-items:center; justify-content:space-between; gap:8px; }
  .opt-person-ratio { color:var(--color-text-secondary); font-weight:400; }
  .opt-person-options select { width:100%; min-height:36px; padding:6px 10px; font-size:13px; border-radius:var(--radius-md); }
  .opt-person-count { gap:4px; }
  @media (max-width:767px) {
    .opt-person-options select { min-height:44px; font-size:16px; }
  }

/* Conflicting library actions stay discoverable and explain why on activation. */
.asset-card-actions .asset-card-primary.is-conflicted,
#batch-add-btn.is-conflicted { opacity: .45; }
.asset-lib-card:focus-within .asset-card-actions { opacity: 1; }

/* A flat assignment matrix: references appear once and every person stays visible. */
.reference-pairing { --reference-pairing-person-width: 104px; --reference-pairing-reference-width: 72px; --reference-pairing-sticky-z: 1; margin-top: var(--space-md); padding-top: var(--space-md); border-top: 1px solid var(--color-border); min-width: 0; }
.reference-pairing [hidden] { display: none !important; }
.reference-pairing-head { display: flex; align-items: baseline; justify-content: space-between; flex-wrap: wrap; gap: var(--space-xs) var(--space-md); margin-bottom: var(--space-sm); }
.reference-pairing-head strong { color: var(--color-text-secondary); font-size: 13px; line-height: 1.5; font-weight: 500; }
.reference-pairing-head p { margin: 0; color: var(--color-text-secondary); font-size: 11px; line-height: 1.6; }
.reference-pairing-scroll { overflow-x: auto; overscroll-behavior-x: contain; scrollbar-width: thin; }
.reference-pairing-matrix { width: 100%; min-width: calc(var(--reference-pairing-person-width) + var(--reference-pairing-columns) * var(--reference-pairing-reference-width)); border-collapse: separate; border-spacing: 0; table-layout: fixed; }
.reference-pairing-matrix th, .reference-pairing-matrix td { padding: 0; text-align: center; font-weight: 400; }
.reference-pairing-matrix .reference-pairing-corner, .reference-pairing-matrix th[scope="row"] { position: sticky; left: 0; z-index: var(--reference-pairing-sticky-z); width: var(--reference-pairing-person-width); background: var(--color-bg-menu); text-align: left; }
.reference-pairing-matrix thead th { height: 72px; vertical-align: top; }
.reference-pairing-matrix thead img { display: block; width: 42px; height: 48px; margin: 0 auto var(--space-xs); border-radius: var(--radius-sm); object-fit: contain; background: var(--color-bg-canvas); }
.reference-pairing-column-name { display: block; overflow: hidden; color: var(--color-text-secondary); font-size: 11px; line-height: 1.5; white-space: nowrap; text-overflow: ellipsis; }
.reference-pairing-matrix tbody th, .reference-pairing-matrix tbody td { border-top: 1px solid var(--color-border); }
.reference-pairing-person { display: flex; align-items: center; gap: var(--space-sm); height: 44px; padding-right: var(--space-sm); color: var(--color-text-secondary); font-size: 12px; white-space: nowrap; }
.reference-pairing-person img { width: 28px; height: 34px; flex-shrink: 0; object-fit: cover; border-radius: var(--radius-sm); }
.reference-pairing-choice { position: relative; display: grid; place-items: center; width: 100%; height: 44px; border-radius: var(--radius-sm); cursor: pointer; transition: background-color 150ms ease; }
.reference-pairing-choice input { position: absolute; inset: 0; width: 100%; height: 100%; margin: 0; opacity: 0; cursor: pointer; }
.reference-pairing-mark { display: grid; place-items: center; width: 18px; height: 18px; border: 1px solid var(--color-border-focus); border-radius: var(--radius-sm); background: var(--color-control-surface); color: var(--color-on-accent); pointer-events: none; }
.reference-pairing-mark svg { opacity: 0; }
.reference-pairing-choice:has(input:checked) { background: var(--color-accent-subtle); }
.reference-pairing-choice:has(input:checked) .reference-pairing-mark { background: var(--color-accent); border-color: var(--color-accent); }
.reference-pairing-choice:has(input:checked) svg { opacity: 1; }
.reference-pairing-choice:has(input:focus-visible) { outline: 2px solid var(--color-accent); outline-offset: -2px; }
.reference-pairing-sr-only { position: absolute; width: 1px; height: 1px; padding: 0; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
.reference-pairing-actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-sm); margin-top: var(--space-xs); padding-top: var(--space-sm); border-top: 1px solid var(--color-border); }
.reference-pairing-actions [role="status"] { min-width: 0; max-width: 100%; margin-left: auto; color: var(--color-text-secondary); font-size: 11px; line-height: 1.5; overflow-wrap: anywhere; }
.reference-pairing[data-save-state="error"] [role="status"] { flex-basis: 100%; color: var(--color-error); }
@media (hover: hover) {
  .reference-pairing-choice:hover { background: var(--color-control-surface-hover); }
  .reference-pairing-choice:has(input:checked):hover { background: var(--color-accent-bg); }
}
@media (max-width: 767px) {
  .reference-pairing-actions .refimg-action-btn { min-height: 44px; }
}
@media (prefers-reduced-motion: reduce) {
  .reference-pairing-choice { transition: none; }
}
