/* ========================================
   配置面板：任务列表、批量操作、进度概览、执行日志
   ======================================== */

/* ---- 任务列表标题下操作区（执行全部 / 起始序号 / 续做失败 / 定时） ---- */
.task-list-actions {
  display: flex;
  align-items: center;
  justify-content: flex-start;
  gap: 8px;
  margin: 6px 0 4px;
}

/* 第二行操作区（续做失败独占）：紧贴第一行下方 */
.task-list-actions--secondary { margin-top: 0; }

/* 操作区按钮文字禁折行 + 不参与 flex 压缩（2026-09-07 用户反馈「按钮风格不统一、
   文字没有一行显示完」）：面板窄时按钮被 flex 压缩导致「失败续做」等折成两行；
   容器允许换行让放不下的输入组掉到下一行，按钮本身永远单行。
   WHY 限定本容器：btn-primary/btn-warning 等是全局类，别的窄工具栏有自己的布局约定 */
.task-list-actions { flex-wrap: wrap; }
.task-list-actions > button {
  white-space: nowrap;
  flex-shrink: 0;
}

/* 「一键失败运行中」（#btn-abort-running）与同区三钮视觉统一：
   btn-danger 全局是小号浅色危险样式（padding 6px 12px / 0.8rem / 500），
   任务池等处仍在用不能动；本按钮在同区与 执行全部/失败续做/定时执行 并排，
   按它们的规格覆盖（8px 16px / 0.85rem / 600 / gap 6px / svg 16px） */
.task-list-actions #btn-abort-running {
  padding: 8px 16px;
  gap: 6px;
  font-size: 0.85rem;
  font-weight: 600;
}
.task-list-actions #btn-abort-running svg { width: 16px; height: 16px; }

/* 起始序号编辑器：紧贴「执行全部」右侧，纯数字小输入框 */
.batch-index-wrap {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: 13px;
  color: var(--color-text-muted);
}

/* label/总说明文字显式 13px（2026-09-15 视觉规整）：与输入框同行同字号；
   积分任务页工具条有独立于 .batch-index-wrap 的裸 .batch-index-label
   （「失败续做」），不显式定义会继承面板默认字号大于输入框（「大小不一」
   主因之一）。个人配置页两类的渲染值本来就是继承 .batch-index-wrap 的
   13px，显式化与现值相等、零回归 */
.batch-index-label,
.batch-index-total { font-size: 13px; }

.batch-index-input {
  width: 52px;
  padding: 3px 6px;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);
  background: var(--color-surface-sunken);
  color: var(--color-text-primary);
  font-size: 13px;
  text-align: center;
  outline: none;
}

.batch-index-input:focus {
  border-color: var(--color-brand);
  box-shadow: 0 0 0 3px var(--color-focus-ring);
}

/* 隐藏 number input 的上下旋转按钮，避免误触跳号 */
.batch-index-input::-webkit-inner-spin-button,
.batch-index-input::-webkit-outer-spin-button {
  -webkit-appearance: none;
  margin: 0;
}

.batch-index-input:disabled,
#auto-continue-threshold:disabled,
#schedule-times:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

/* 定时执行时间输入：文本型，比数字输入框宽（容纳 "01:00, 18:00"） */
.schedule-times-input {
  width: 150px;
  padding: 3px 6px;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);
  background: var(--color-surface-sunken);
  color: var(--color-text-primary);
  font-size: 13px;
  text-align: center;
  font-family: var(--font-mono);
  outline: none;
}

.schedule-times-input:focus {
  border-color: var(--color-brand);
  box-shadow: 0 0 0 3px var(--color-focus-ring);
}

/* 项目信息底部操作区（保存 / 发布集市） */
.project-info-actions {
  display: flex;
  align-items: center;
  justify-content: flex-start;
  gap: 8px;
  margin-top: 20px;
  padding-top: 16px;
  border-top: 1px solid var(--color-border);
}

/* ---- 任务列表 ---- */
.task-list {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.task-item {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  overflow: hidden;
  transition: border-color var(--transition-smooth), box-shadow var(--transition-smooth), transform var(--transition-smooth);
  animation: fadeSlideIn 0.4s ease;
  box-shadow: var(--shadow-sm);
}

.task-item:hover {
  border-color: var(--color-border-strong);
  box-shadow: var(--shadow-md);
  transform: translateY(-1px);
}

.task-item.executing {
  border-color: rgba(165, 130, 46, 0.35);
  background: linear-gradient(135deg, rgba(201, 169, 78, 0.05) 0%, rgba(201, 169, 78, 0.02) 60%, transparent 100%);
  animation: executingPulse 3s ease-in-out infinite;
}

/* 预测按钮引导预填：新预填/被定位的任务卡闪烁高亮（2026-10-11 预测引导计划 Task 1）
   消费方 = ranking_ui.js _applyQuotePredictGuide（加类 scrollIntoView 定位后 2.6s 摘除）。
   品牌绿描边 + 淡底闪烁（@keyframes taskGuideFlash 定义在 base.css，同 executingPulse 先例：
   组件规则在本文件、keyframes 在 base.css）。 */
.task-item.task-card-guide-flash {
  border-color: var(--color-brand);
  background: var(--color-brand-subtle);
  animation: taskGuideFlash 0.9s ease-in-out 2;
}

.task-item-header {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 14px 16px;
  cursor: pointer;
}

/* 积分任务领取卡片：三行式头部（2026-09-03 两行式；2026-10-28 用户拍板改三行，
   同日二次拍板倒计时 chip 上移行1、状态徽章上移行2 → 行1 身份+倒计时、
   行2 RunID+状态徽章、行3 操作）。
   仅作用于 .taskpool-claim-card，个人界面/积分集市共用的 .task-item-header
   单行布局不受影响 */
.taskpool-claim-card .task-item-header {
  flex-direction: column;
  align-items: stretch;
  gap: 4px;
}

.task-item-row {
  display: flex;
  align-items: center;
  gap: 12px;
  min-width: 0;
}

/* 行2 缩进与行1 任务名对齐（序号 min-width 24px + gap 12px = 36px） */
.taskpool-claim-card .task-item-row-meta {
  padding-left: 36px;
  gap: 10px;
}

.task-index {
  font-size: 0.75rem;
  font-weight: 700;
  color: var(--color-text-muted);
  min-width: 24px;
}

.task-target-input {
  flex: 0 0 auto;
  width: 120px;
  background: none;
  border: none;
  color: var(--color-text-primary);
  font-size: 0.9rem;
  font-family: var(--font-mono);
  outline: none;
  padding: 4px 0;
  overflow: hidden;
  text-overflow: ellipsis;
}

.task-target-input::placeholder { color: var(--color-text-muted); font-family: var(--font-sans); }
.task-target-input:focus { color: var(--color-brand); }

/* RunID 标签：点击复制，宽度自适应内容以显示完整进度信息 */
.task-runid-label {
  font-size: 0.7rem;
  font-weight: 500;
  color: var(--color-text-muted);
  background: transparent;
  border: 1px solid var(--color-border);
  padding: 1px 6px;
  border-radius: var(--radius-sm);
  font-family: var(--font-mono);
  white-space: nowrap;
  flex-shrink: 0;
  margin-left: 6px;
  display: inline-flex;
  align-items: center;
  cursor: pointer;
  transition: all 0.15s ease;
}

.task-runid-label:hover {
  color: var(--color-brand);
  border-color: var(--color-brand);
}

.task-runid-label.runid-running { color: var(--color-running); border-color: var(--color-running); }
.task-runid-label.runid-completed { color: var(--color-success); border-color: var(--color-success); }
.task-runid-label.runid-failed { color: var(--color-danger); border-color: var(--color-danger); }
.task-runid-label.runid-unknown { color: var(--color-warning); border-color: var(--color-warning); }
.task-runid-label.runid-pending { color: var(--color-text-muted); border-color: var(--color-border); }
.task-runid-label.runid-error { color: var(--color-danger); border-color: var(--color-danger); }

/* 任务卡片内续做按钮 */
.task-item-continue-btn {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 3px 8px;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);
  background: transparent;
  color: var(--color-text-muted);
  font-size: 0.7rem;
  cursor: pointer;
  transition: all 0.15s ease;
  flex-shrink: 0;
}

.task-item-continue-btn svg { width: 12px; height: 12px; }

.task-item-continue-btn:hover {
  border-color: var(--color-brand);
  color: var(--color-brand);
  background: var(--color-brand-subtle);
}

/* 失败状态时续做按钮高亮 */
.task-item.failed .task-item-continue-btn,
.task-status-badge.failed ~ .task-item-header .task-item-continue-btn {
  border-color: var(--color-danger);
  color: var(--color-danger);
}

.task-item.failed .task-item-continue-btn:hover {
  background: var(--color-danger-subtle);
}

.task-status-badge {
  display: flex;
  align-items: center;
  gap: 5px;
  font-size: 0.75rem;
  font-weight: 600;
  padding: 4px 10px;
  border-radius: 20px;
  white-space: nowrap;
  flex-shrink: 0;
}

.task-status-badge.pending { background: var(--color-surface-sunken); color: var(--color-text-muted); border: 1px solid var(--color-border); }
.task-status-badge.running { background: var(--color-running-subtle); color: var(--color-running); }
.task-status-badge.completed { background: var(--color-success-subtle); color: var(--color-success); }
.task-status-badge.failed { background: var(--color-danger-subtle); color: var(--color-danger); }
/* 连接异常：WS/TIMEOUT 持续失败超阈值后的降级态，warning 色系与 unknown 一致 */
.task-status-badge.disconnected { background: var(--color-warning-subtle); color: var(--color-warning); }
.task-status-badge.failed[data-error] { position: relative; cursor: help; }

.task-status-badge.failed[data-error]:hover::after {
  content: "失败原因: " attr(data-error);
  position: absolute;
  left: 0;
  top: 100%;
  margin-top: 6px;
  background: var(--color-danger);
  color: #fff;
  padding: 8px 12px;
  border-radius: var(--radius-sm);
  font-size: 12px;
  font-weight: 400;
  z-index: var(--z-toast);
  box-shadow: var(--shadow-md);
  max-width: 300px;
  word-wrap: break-word;
  pointer-events: none;
  white-space: normal;
}

.status-dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: currentColor;
}

.status-dot.running { animation: pulse-dot 1s infinite; }

.task-item-actions {
  display: flex;
  gap: 4px;
  margin-left: auto;
  flex-shrink: 0;
}

.task-item-btn {
  width: 30px;
  height: 30px;
  background: none;
  border: none;
  border-radius: var(--radius-md);
  color: var(--color-text-muted);
  display: flex;
  align-items: center;
  justify-content: center;
  transition: all var(--transition-fast);
}

.task-item-btn:hover { background: var(--color-brand-subtle); color: var(--color-text-primary); }
.task-item-btn.danger:hover { background: var(--color-danger-subtle); color: var(--color-danger); }
.task-item-btn svg { width: 15px; height: 15px; }

.task-item-detail {
  display: none;
  padding: 0 16px 14px 52px;
  font-size: 0.8rem;
  color: var(--color-text-muted);
}

.task-item.expanded .task-item-detail { display: block; }

/* ---- secCode 市场/解析区（2026-08-26 计划 T6）---- */
/* header 徽章：折叠态可见的解析状态。
   2026-10-11 合并口径（用户拍板「两个按钮合并一起」）：徽章即解析入口（点徽章=解析，
   cursor/hover 在本样式块），hover 反馈沿用解析按钮的 brand-subtle；
   原 .task-seccode-resolve-btn 随展开区按钮一并退役 */
.task-seccode-chip {
  font-family: var(--font-mono);
  font-size: 0.7rem;
  padding: 2px 8px;
  border-radius: var(--radius-sm);
  background: var(--color-success-subtle);
  color: var(--color-success);
  border: 1px solid var(--color-border);
  white-space: nowrap;
  cursor: pointer;
}
.task-seccode-chip:hover { background: var(--color-brand-subtle); }
.task-seccode-chip.missing {
  background: var(--color-warning-subtle);
  color: var(--color-warning);
}

/* detail 内市场下拉 + 状态文字 */
.task-market-label {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-right: 10px;
}
.task-market-select,
.task-path-select,
.task-seccode-select {
  font-size: 0.8rem;
  padding: 2px 6px;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);
  background: var(--color-surface);
  color: var(--color-text-primary);
}
/* 任务级大类/小类控件已随 2026-10-25 分类定制退役删除（客户不再编辑/展示分类） */
.task-seccode-status { font-family: var(--font-mono); font-size: 0.75rem; }
/* .ok 样式随 2026-10-11 展开区去重退役：已解析态状态区留空，代码由顶部徽章唯一展示 */
.task-seccode-status.missing { color: var(--color-warning); }
.task-seccode-status.multi { color: var(--color-text-muted); }

.task-runid {
  font-family: var(--font-mono);
  font-size: 0.75rem;
  color: var(--color-brand);
  margin-bottom: 4px;
}

/* ---- 进度概览 ---- */
.progress-overview {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  padding: 18px 20px;
  margin-bottom: 20px;
  box-shadow: var(--shadow-sm);
}

.progress-stats {
  display: flex;
  gap: 24px;
  margin-bottom: 14px;
}

.stat-item {
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.stat-value {
  font-size: 1.4rem;
  font-weight: 700;
  letter-spacing: -0.02em;
  line-height: 1;
}

.stat-label {
  font-size: 0.7rem;
  color: var(--color-text-muted);
  text-transform: uppercase;
  letter-spacing: 0.05em;
}

.stat-item.running .stat-value { color: var(--color-running); }
.stat-item.success .stat-value { color: var(--color-success); }
.stat-item.danger .stat-value { color: var(--color-danger); }
.stat-item.current .stat-value {
  color: var(--color-brand);
  font-size: 1.6rem;
  font-weight: 800;
}

.progress-bar-wrap {
  height: 5px;
  background: var(--color-border);
  border-radius: 3px;
  overflow: hidden;
}

.progress-bar {
  height: 100%;
  background: var(--brand-gradient);
  border-radius: 3px;
  transition: width 0.8s var(--transition-smooth);
  width: 0%;
  box-shadow: 0 0 8px rgba(165, 130, 46, 0.30);
}

/* ---- 执行日志：亮色控制台 ---- */
.log-viewport {
  background: var(--color-surface-sunken);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  max-height: 400px;
  overflow-y: auto;
  font-family: var(--font-mono);
  font-size: 0.8rem;
  line-height: 1.7;
  padding: 16px;
  box-shadow: inset 0 1px 4px rgba(35, 30, 15, 0.05);
}

.log-placeholder {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  height: 100%;
  min-height: 200px;
  color: var(--color-text-muted);
  gap: 8px;
}

.log-placeholder svg { width: 32px; height: 32px; opacity: 0.3; }

.log-entry {
  padding: 4px 0;
  display: flex;
  gap: 8px;
  animation: logIn 0.2s ease;
}

.log-time {
  color: var(--color-text-muted);
  flex-shrink: 0;
  font-size: 0.75rem;
}

.log-msg { word-break: break-all; }

.log-entry.info .log-msg { color: var(--color-text-secondary); }
.log-entry.success .log-msg { color: var(--color-success); }
.log-entry.error .log-msg { color: var(--color-danger); }
.log-entry.warning .log-msg { color: var(--color-warning); }

.log-actions { display: flex; align-items: center; gap: 4px; }

/* ========================================
   积分任务（taskpool）微信风换肤（2026-09-10 P3）
   范围：官方/个人任务 tab、管理页、我的积分页。
   WHY 一律挂 taskpool 专属类/id 做作用域：.task-item-* / .task-status-badge /
   .progress-overview 等基类被个人界面（ranking_ui）共享，本区块只换肤不改布局，
   动态 class 均已在本文件落定义（corrections 2026-08-27 口径）
   ======================================== */

/* ---- 工具条/组头按钮：行内紧凑档统一 34px（2026-09-15 视觉规整）----
   高 34px / 字 13px / 圆角 8px / padding 0 12px，覆盖 .btn-primary/
   .btn-secondary/.btn-danger/.btn-schedule 基类 44px，仅 taskpool 页作用域
   （不动 components.css 全局基类语义；行内 align-items:center/gap 8px 由
   .taskpool-shared-toolbar 与 .taskpool-group-header-actions 容器提供）。
   运行中态换文案 + spinner 的逻辑在 JS，样式随各按钮基类配色不动。
   历史：原 #taskpool-claim-btn/#market-run-all-btn 48px 大按钮规则因上一条
   注释破损自上线即整条失效（2026-09-15 发现），且与统一 34px 档冲突，删除
   不恢复；原 #taskpool-body .panel-header-actions 小按钮覆盖（0.78rem）在
   2026-09-14 单页合并后已无渲染方（taskpool 页 DOM 不再有 .panel-header-actions），
   一并退役——字号统一 13px 绝对 px（coding-standards #29 紧凑控件禁 rem） */
#taskpool-view .taskpool-shared-toolbar .btn-primary,
#taskpool-view .taskpool-shared-toolbar .btn-secondary,
#taskpool-view .taskpool-shared-toolbar .btn-danger,
#taskpool-view .taskpool-shared-toolbar .btn-schedule,
#taskpool-view .taskpool-group-header-actions .btn-primary,
#taskpool-view .taskpool-group-header-actions .btn-secondary,
#taskpool-view .taskpool-group-header-actions .btn-danger {
  height: 34px;
  min-height: 34px; /* 基类 .btn-primary/.btn-secondary 带 min-height:44px，不压过则 44 赢（实测踩过） */
  padding: 0 12px;
  font-size: 13px;
  border-radius: var(--radius-md);
}

/* ========================================
   单页双分组（2026-09-14 积分任务页单页合并 T6）
   双 tab 改为单页内「官方任务 / 个人任务」两个白卡分组。
   WHY 一律以 #taskpool-view 为作用域前缀，不动 components.css 共享基类
   （architecture-rules #31 先例：forum 工具条在 forum.css 内平行复刻）。
   折叠态用 class（.collapsed）控显隐，不用 hidden 属性——无需 [hidden] 兜底
   ======================================== */

/* ---- 分组容器：白卡（对齐 .market-task-card / .tp-admin-table-wrap 白卡口径）---- */
#taskpool-view .taskpool-group {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  padding: 12px var(--wx-cell-pad-h);
}

/* 组间距 */
#taskpool-view .taskpool-group + .taskpool-group { margin-top: 12px; }

/* ---- 组头行：可点击折叠，右侧留操作按钮区 ---- */
#taskpool-view .taskpool-group-header {
  display: flex;
  align-items: center;
  gap: 8px;
  min-height: 40px;
  cursor: pointer;
  user-select: none;
}

/* 折叠指示：▾ 常态展开，折叠时左旋 90° 变 ▸（简单为主） */
#taskpool-view .taskpool-group-header::before {
  content: "▾";
  flex-shrink: 0;
  font-size: 12px;
  color: var(--color-text-secondary);
  transition: transform var(--transition-fast);
}
#taskpool-view .taskpool-group.collapsed .taskpool-group-header::before {
  transform: rotate(-90deg);
}

/* 组标题：15px 加粗绝对 px（coding-standards #29：紧凑控件不用 rem） */
#taskpool-view .taskpool-group-title {
  font-size: 15px;
  font-weight: 700;
  line-height: 20px;
  color: var(--color-text-primary);
  margin: 0;
}

/* 右侧操作按钮区（不随折叠点击冒泡的容器由 JS 控制 stopPropagation）。
   2026-10-27 公共组头收编急停/刷新共 4 按钮，窄屏放不下时按钮区内换行
   （右对齐，不横向溢出）；换行后组头 min-height 撑高属预期 */
#taskpool-view .taskpool-group-header-actions {
  margin-left: auto;
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  justify-content: flex-end;
  gap: 8px;
}

/* 两组组头按钮固定两列网格（2026-10-27 用户拍板「按照2行，并行对齐」；
   2026-10-28 个人组补「刷新+一键失败运行中」后用户拍板与公共组对齐，
   grid 扩展到两组）：flex-wrap 自然换行在窄面板会折行且不对齐；改两列
   grid 定形——公共组 4 键 2×2（行1 自动跑数|一键取消领取、行2 一键失败
   运行中|刷新）；个人组 5 键 2/2/1（行1 返回积分集市|全部跑数、行2 一键
   取消领取|一键失败运行中、行3 刷新），按钮拉伸铺满格子保证两列左右
   边缘对齐 */
#taskpool-view #taskpool-group-official .taskpool-group-header-actions,
#taskpool-view #taskpool-group-personal .taskpool-group-header-actions {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
}
#taskpool-view #taskpool-group-official .taskpool-group-header-actions > button,
#taskpool-view #taskpool-group-personal .taskpool-group-header-actions > button {
  width: 100%;
}

/* 计数徽章：灰底小 pill（对齐 .tree-node-runid 口径）——line-height 显式写死
   防继承父级行高反向撑高行（corrections 2026-09-12 同族教训） */
#taskpool-view .taskpool-group-badge {
  display: inline-block;
  padding: 2px 6px;
  border-radius: 999px;
  background: var(--color-surface-sunken);
  color: var(--color-text-secondary);
  font-size: 10px;
  line-height: 14px;
}

/* ---- 折叠态：class 控显隐 ---- */
#taskpool-view .taskpool-group.collapsed .taskpool-group-body { display: none; }

/* ---- 公共工具条容器（T3 落位）：白卡内一行/两行参数行的通用 flex 容器 ---- */
#taskpool-view .taskpool-shared-toolbar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
}

/* ---- 行内输入框统一档（2026-09-15 视觉规整）：高 34px / 字 13px ----
   仅 taskpool 页作用域：.batch-index-input/.schedule-times-input 基类被
   个人配置页任务列表区共用（ranking.html，#panel-config 另有 32px 覆盖），
   不动基类（零触碰红线）；工具条输入框在本页无 #panel-config 覆盖、裸基类
   仅 ~25px 高，与按钮 34px 不齐——本规则补齐 */
#taskpool-view .batch-index-input,
#taskpool-view .schedule-times-input {
  height: 34px;
  font-size: 13px;
}

/* ---- 区块标题 h2（当前任务池/执行日志/完成上报等 .config-section）：----
   taskpool 页作用域压到 16px/600（layout.css 基类 1.45rem/700 过大、与
   分组白卡不协调）；分组标题 .taskpool-group-title 15px/700 保持，恢复
   「分组标题 < 区块标题」两级层次 */
#taskpool-view .config-section .panel-header h2 {
  font-size: 16px;
  font-weight: 600;
}

/* 工具参数行（失败续做间隔/定时时间/并发）：行距收紧（row-gap 对齐 8px
   统一档）；.btn-schedule 小规格已并入上方「工具条/组头按钮统一 34px」规则
   （2026-09-15，原 0.78rem 覆盖退役，单一来源防两处漂移） */
#taskpool-body .task-list-actions--secondary { margin: 2px 0 0; row-gap: 8px; }

/* ---- 池概况（#taskpool-pool-desc）：白卡上的凹陷信息行 ---- */
#taskpool-pool-desc {
  background: var(--color-surface-sunken);
  border-radius: var(--radius-md);
  padding: 10px 14px;
  margin: 12px 0 0;
  font-size: 0.85rem;
  color: var(--color-text-secondary);
}

/* ---- 领取卡（官方 .taskpool-claim-card / 集市标的卡共用）：白卡 8px 圆角 +
   按压态；仅覆盖外观，头部两行式布局与展开区结构不动（三级脏检查依赖
   .taskpool-claim-card/.task-item-header/.task-status-badge 等类名） ---- */
.taskpool-claim-card { border-radius: var(--radius-md); }
.taskpool-claim-card:hover { transform: none; box-shadow: var(--shadow-sm); }
.taskpool-claim-card .task-item-header:active { background: var(--wx-pressed); }

/* 领取卡正面常显 path/大类/小类 只读反显行（2026-10-13 用户二次拍板：不放展开区，
   默认显示，对齐个人配置卡布局；2026-10-13 首版「展开区首行」口径已废）：
   个人卡的行布局规则锁 #panel-config 作用域（config-panel.css「展开区 cell 化」块），
   领取卡在 taskpool 面板复用命中不了，按本块既有 .taskpool-claim-card 自作用域
   先例补同值规则；常显态自带横向 16px 内边距（对齐头部 padding）+ hairline 分隔；
   控件类（.task-market-label/.task-path-select/input.task-*-select）无面板作用域，
   直接复用 */
.taskpool-claim-card .task-detail-row {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 4px 12px;
  padding: 6px 16px;
  border-top: 1px solid var(--color-border);
}
/* path 目录较长（含子目录段）时防溢出：select 按内容自适应但封顶不撑爆行，
   完整值走 title 悬浮提示 */
.taskpool-claim-card .task-detail-row .task-path-select { max-width: 100%; }

/* 状态徽章：2026-09-15 视觉规整——taskpool 卡内 4px 方角覆盖整体退役，
   回归 .task-status-badge 胶囊基类（border-radius 20px / 0.75rem / 4px 10px），
   与个人界面（ranking_ui）徽章观感一致；#panel-config 的同款方角覆盖是
   配置页自身口径，本批不动（零触碰红线） */

/* ---- 进度概览：微信细进度条（品牌绿、去旧金色光晕）+ 数字统计 ---- */
#taskpool-body .progress-overview { padding: 14px 16px; }
#taskpool-body .progress-bar-wrap {
  height: 4px;
  background: var(--wx-seg-bg);
  border-radius: 2px;
}
#taskpool-body .progress-bar {
  background: var(--color-brand);
  border-radius: 2px;
  box-shadow: none;
}

/* ---- 管理页：表单 cell 化（tp-form-* 全套） ---- */
.tp-admin-form { display: flex; flex-direction: column; gap: 14px; }

.tp-form-row {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  gap: 10px 16px;
  margin: 0;
}

/* 字段组：label 13px 二级色在上，输入框在下（微信表单 cell 口径） */
.tp-form-field {
  display: flex;
  flex-direction: column;
  gap: 4px;
  min-width: 0;
}

/* 独占整行的字段（只读 pre / 落盘目录等长输入） */
.tp-form-field--grow { flex: 1 1 100%; }

.tp-form-label {
  font-size: 13px;
  color: var(--color-text-secondary);
  margin: 0;
  white-space: nowrap;
}

.tp-form-input {
  min-height: 36px;
  padding: 6px 10px;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);
  background: var(--color-surface-sunken);
  color: var(--color-text-primary);
  font-size: 14px;
  font-family: inherit;
  outline: none;
  box-sizing: border-box;
}
.tp-form-input:focus {
  border-color: var(--color-brand);
  box-shadow: 0 0 0 3px var(--color-focus-ring);
  background: var(--color-surface);
}

/* 数字/日期等短输入固定宽；独占行字段通栏 */
.tp-form-input--num { width: 120px; }
.tp-form-field--grow .tp-form-input { width: 100%; }

/* 提交/取消按钮行（完成上报表单） */
.tp-form-actions {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-top: 14px;
}
.tp-form-actions .btn-primary { min-width: 120px; }

/* 管理页总览/发布清单：搜索框 + 分页/移除小按钮（历史缺 CSS 定义，微信化补齐） */
.taskpool-search-input {
  min-height: 34px;
  padding: 5px 10px;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);
  background: var(--color-surface-sunken);
  color: var(--color-text-primary);
  font-size: 13px;
  outline: none;
}
.taskpool-search-input:focus {
  border-color: var(--color-brand);
  box-shadow: 0 0 0 3px var(--color-focus-ring);
}

.taskpool-page-btn {
  min-height: 30px;
  padding: 4px 14px;
  margin: 0 4px;
  font-size: 13px;
  border: 1px solid var(--color-border-strong);
  border-radius: var(--radius-sm);
  background: var(--color-surface);
  color: var(--color-text-primary);
}
.taskpool-page-btn:active { background: var(--wx-pressed); }

.taskpool-item-remove {
  min-height: 26px;
  padding: 2px 10px;
  font-size: 12px;
  border: 1px solid var(--color-danger-border);
  border-radius: var(--radius-sm);
  background: var(--color-surface);
  color: var(--color-danger);
}
.taskpool-item-remove:active { background: var(--color-danger-subtle); }

/* ---- 我的积分页：微信钱包式 ---- */
/* 余额大卡：白卡居中、大号数字、下方微信绿主按钮 */
.tp-wallet-card {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  padding: 28px 16px 24px;
  margin: 8px 0;
  text-align: center;
  box-shadow: var(--shadow-sm);
}
.tp-wallet-label { font-size: 13px; color: var(--color-text-secondary); }
.tp-wallet-balance {
  font-size: 44px;
  font-weight: 700;
  color: var(--color-text-primary);
  line-height: 1.2;
  letter-spacing: -0.02em;
  margin: 6px 0 2px;
}
.tp-wallet-unit {
  font-size: 15px;
  font-weight: 400;
  color: var(--color-text-secondary);
  margin-left: 6px;
}
.tp-wallet-hint {
  font-size: 12px;
  color: var(--color-text-muted);
  margin: 4px 0 16px;
}
.tp-wallet-recharge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 48px;
  padding: 0 40px;
  background: var(--color-brand);
  color: #fff;
  font-size: 1rem;
  font-weight: 600;
  border-radius: var(--radius-md);
}
.tp-wallet-recharge:active { background: var(--color-brand-strong); }

/* 账单卡（充值记录 / 积分流水）：白卡 + cell 行 + hairline 分隔 */
.tp-bill-card {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  margin: 8px 0;
  overflow: hidden;
  box-shadow: var(--shadow-sm);
}
.tp-bill-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  padding: 14px 16px 8px;
  font-size: 15px;
  font-weight: 600;
  color: var(--color-text-primary);
}
.tp-bill-head-note {
  font-size: 12px;
  font-weight: 400;
  color: var(--color-text-muted);
}
.tp-bill-list { padding: 0 0 4px; }
.tp-bill-item {
  position: relative;
  display: flex;
  align-items: center;
  gap: 12px;
  min-height: 56px;
  padding: 10px 16px;
}
/* cell 间 hairline：1px 缩进左 16px（对齐 components.css .wx-cell 口径） */
.tp-bill-item:not(:last-child)::after {
  content: '';
  position: absolute;
  left: 16px;
  right: 0;
  bottom: 0;
  height: 1px;
  background: var(--color-border);
  transform: scaleY(0.5);
  transform-origin: bottom;
}
.tp-bill-info { flex: 1; min-width: 0; }
.tp-bill-title {
  font-size: 16px;
  color: var(--color-text-primary);
  line-height: 1.4;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.tp-bill-task {
  font-size: 12px;
  color: var(--color-text-muted);
  margin-left: 6px;
  white-space: nowrap;
}
.tp-bill-time {
  font-size: 13px;
  color: var(--color-text-muted);
  margin-top: 2px;
}
/* 金额列：账单语义——正=收入绿（--color-success #07c160）、负=支出红
  （--color-danger #fa5151），等宽数字对齐 */
.tp-bill-amount {
  flex-shrink: 0;
  font-size: 16px;
  font-weight: 600;
  font-variant-numeric: tabular-nums;
}
.tp-bill-amount--in { color: var(--color-success); }
.tp-bill-amount--out { color: var(--color-danger); }

/* ========================================
   配置面板（panel-config）微信风换肤（2026-09-10 P4-T4.2）
   范围：SMAN 连接 / 项目信息 / 任务列表 / 执行日志四分组 + 任务卡（createTaskCard）
   动态模板外观 + 大类/小类下拉浮层。桌面端只换肤不改布局结构。
   WHY 全部挂 #panel-config 做作用域：.task-item-* / .dropdown-panel / .form-field /
   .progress-overview 等基类被任务池/集市/文档页共享，本区块不改布局、不动 P3 的
   tp-* 区块；动态 class（task-item-arrow / task-detail-row）
   均已在本文件落定义（corrections 2026-08-27 口径）。
   ======================================== */

/* ---- 分组：微信设置页白卡（组间 8px 留白；section-divider 退役改分组间距） ---- */
#panel-config .panel-inner {
  background: transparent;
  border: none;
  box-shadow: none;
}
#panel-config .config-section {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  padding: 16px;
  box-shadow: var(--shadow-sm);
}
#panel-config .config-section + .config-section,
#panel-config .section-divider + .config-section { margin-top: 8px; }
#panel-config .section-divider { display: none; }

/* ---- 三卡分组折叠（2026-10-30，对齐积分任务页 T6 分组白卡）----
   跑数设置 / 任务列表 / 执行日志三卡；数值逐条同源 taskpool 分组口径，
   选择器在 #panel-config 内平行复刻、不共用（architecture-rules #31 先例）。
   折叠态用 class（.collapsed）控显隐，不用 hidden 属性 */
#panel-config .config-group-header {
  display: flex;
  align-items: center;
  flex-wrap: wrap; /* 窄面板（如 375px）标题+按钮区放不下时，按钮区整体换到下一行，
                      两列格子因此拿到约 150px 宽，「一键失败运行中」7 字可单行放下；
                      宽屏不换行，与积分任务组头形态一致（2026-10-30 真浏览器实测） */
  gap: 8px;
  min-height: 40px;
  cursor: pointer;
  user-select: none;
}
/* 折叠指示：▾ 常态展开，折叠时左旋 90° 变 ▸ */
#panel-config .config-group-header::before {
  content: "▾";
  flex-shrink: 0;
  font-size: 12px;
  color: var(--color-text-secondary);
  transition: transform var(--transition-fast);
}
#panel-config .config-group.collapsed .config-group-header::before {
  transform: rotate(-90deg);
}
/* 组标题：15px 加粗绝对 px（coding-standards #29：紧凑控件不用 rem） */
#panel-config .config-group-title {
  font-size: 15px;
  font-weight: 700;
  line-height: 20px;
  color: var(--color-text-primary);
  margin: 0;
}
/* 计数徽章：灰底小 pill——line-height 显式写死防继承父级行高反向撑高行
   （corrections 2026-09-12 同族教训） */
#panel-config .config-group-badge {
  display: inline-block;
  padding: 2px 6px;
  border-radius: 999px;
  background: var(--color-surface-sunken);
  color: var(--color-text-secondary);
  font-size: 10px;
  line-height: 14px;
}
/* 组头右侧操作区：右对齐；仅任务列表卡用两列 grid 定形（flex-wrap 在窄面板
   折行且不对齐），按钮 34px 紧凑档——基类带 min-height:44px，不显式压过则
   44 赢（taskpool 同款踩坑） */
#panel-config .config-group-header-actions { margin-left: auto; }
#panel-config #config-group-tasks .config-group-header-actions {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
}
#panel-config #config-group-tasks .config-group-header-actions > button {
  width: 100%;
  /* 常规 34px 紧凑档，但高度取 auto：超窄屏（<340px）「一键失败运行中」折两行时
     按钮自然长高而不是把文字裁掉（2026-10-30 真浏览器实测口径） */
  height: auto;
  min-height: 34px;
  padding: 4px 12px;
  font-size: 13px;
  border-radius: var(--radius-md);
}
/* 组头按钮图标统一 14px 紧凑档——components.css 的 .btn-danger svg 没有尺寸约束
   （只给 primary/secondary/warning/schedule 定了 16px），不压住则 svg 在 flex 里被
   拉伸成 ~38px 挤掉文字（2026-10-30 harness 实测：「一键失败运行中」文字竖向溢出） */
#panel-config #config-group-tasks .config-group-header-actions > button svg {
  width: 14px;
  height: 14px;
  flex-shrink: 0;
}
/* 执行日志卡组头操作区：图标按钮右对齐不铺满（.btn-icon-sm 保持既有尺寸，
   不在上方 34px 按钮规则内） */
#panel-config .config-group-header .log-actions {
  margin-left: auto;
  display: flex;
  align-items: center;
  gap: 4px;
}
/* ---- 折叠态：class 控显隐 ---- */
#panel-config .config-group.collapsed .config-group-body { display: none; }
/* 组头与分组体间距（折叠态 body 隐藏，无影响） */
#panel-config .config-group-body { margin-top: 12px; }

/* ---- 表单 cell 化：44px 高、凹陷浅底、聚焦绿描边；只读输入（用户 ID/名称）灰字 ---- */
#panel-config .form-field label {
  font-size: 13px;
  font-weight: 500;
  text-transform: none;
  letter-spacing: 0;
  color: var(--color-text-secondary);
}
#panel-config .form-field input,
#panel-config .form-field textarea,
#panel-config .form-field select {
  min-height: 44px;
  padding: 10px 12px;
  background: var(--color-surface-sunken);
  border-color: transparent;
  border-radius: var(--radius-md);
}
#panel-config .form-field input:hover,
#panel-config .form-field textarea:hover,
#panel-config .form-field select:hover { border-color: var(--color-border); }
#panel-config .form-field input:focus,
#panel-config .form-field textarea:focus,
#panel-config .form-field select:focus { border-color: var(--color-brand); }
#panel-config .form-field input[readonly] { color: var(--color-text-secondary); }

/* 项目信息底部操作区（保存/发布集市）：桌面保持横排，按钮统一 40px 高 */
#panel-config .project-info-actions { border-top: none; padding-top: 16px; }
#panel-config .project-info-actions .btn-secondary {
  justify-content: center;
  min-height: 40px;
}

/* 批量执行工具行（执行全部+起始序号 / 失败续做 / 定时 / 急停）：四钮统一 34px
   紧凑档（2026-09-15 用户拍板「按钮不统一不美观」——原 40px 档 + 移动端藏文字
   图标小方块参差；对齐 #taskpool-view 工具条同款规格，见上方 T6 统一档注释）。
   语义配色各随基类不动（执行全部=品牌绿 / 失败续做=琥珀 / 定时=信息蓝 / 急停=红），
   只统一几何：高 34 / padding 0 12 / 字 13px / svg 14px / gap 4px */
#panel-config .task-list-actions .btn-primary,
#panel-config .task-list-actions .btn-warning,
#panel-config .task-list-actions .btn-schedule,
#panel-config .task-list-actions #btn-abort-running {
  height: 34px;
  min-height: 34px; /* 基类带 min-height:44px，不压过则 44 赢（taskpool 同款踩坑） */
  padding: 0 12px;
  font-size: 13px;
  border-radius: var(--radius-md);
  gap: 4px;
}
#panel-config .task-list-actions .btn-primary svg,
#panel-config .task-list-actions .btn-warning svg,
#panel-config .task-list-actions .btn-schedule svg,
#panel-config .task-list-actions #btn-abort-running svg { width: 14px; height: 14px; }
/* 行内参数输入与按钮同高（原 32px 档退役） */
#panel-config .task-list-actions .batch-index-input,
#panel-config .task-list-actions .schedule-times-input {
  height: 34px;
  min-height: 0;
  font-size: 13px;
}

/* ---- 大类/小类下拉 + 标的联想浮层：微信联想下拉（白卡、44px 行高、按压灰高亮） ----
   只改外观，键盘导航/blur/唯一候选自动写入逻辑全在 JS 未动 */
#panel-config .dropdown-panel { box-shadow: var(--shadow-lg); }
#panel-config .dropdown-panel .dropdown-item {
  display: flex;
  align-items: center;
  min-height: 44px;
  padding: 4px 12px;
  font-size: 14px;
  white-space: normal;
}
#panel-config .dropdown-panel .dropdown-item:hover,
#panel-config .dropdown-panel .dropdown-item.active {
  background: var(--wx-pressed);
  color: var(--color-text-primary);
}
#panel-config .dropdown-panel .dropdown-empty {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 44px;
}

/* ---- 任务卡：微信白卡（8px 圆角、8px 间距、header 按压态、扁平无悬浮位移） ----
   2026-10-30 用户拍板：header 由单行改三行式（行1 身份 / 行2 状态 / 行3 操作），
   与积分任务领取卡（.taskpool 领取卡）同构（flex-direction:column + 三个
   .task-item-row + .task-item-row-meta 缩进）；path 行从展开区提为 header 之下
   的常显行（.task-detail-row.task-path-row）。计划：
   docs/superpowers/plans/2026-10-30-config-taskcard-multiline.md Task 2。
   仅 #panel-config 作用域（架构 #31），领取卡既有规则不动 ---- */
#panel-config .task-list { gap: 8px; }
#panel-config .task-item {
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-sm);
}
#panel-config .task-item:hover { transform: none; box-shadow: var(--shadow-sm); }
/* 三行式 header：column + 行间 4px（与领取卡同值）；min-height/padding 保持原触摸档 */
#panel-config .task-item-header {
  flex-direction: column;
  align-items: stretch;
  gap: 4px;
  padding: 8px 12px;
  min-height: 40px;
}
#panel-config .task-item-header:active { background: var(--wx-pressed); }

/* 行2 缩进与行1 任务名对齐（序号 min-width 24px + 行 gap 12px = 36px，
   与领取卡 .task-item-row-meta 规则同值） */
#panel-config .task-item-row-meta { padding-left: 36px; gap: 10px; }

/* 行1：名称撑满剩余宽度（桌面/移动统一），箭头靠右端 */
#panel-config .task-target-input { flex: 1 1 auto; width: auto; min-width: 0; }

/* 行3：按钮组直接落在 .task-item-row（不再包 .task-item-actions，其基类
   margin-left:auto 不参与该行）；图标按钮 30px / 续做胶囊沿用基类尺寸，只防收缩 */
#panel-config .task-item-row .task-item-btn,
#panel-config .task-item-row .task-item-continue-btn { flex-shrink: 0; }

/* 展开箭头（createTaskCard 新增外观元素）：行1 末尾靠右端（margin-left:auto），
   expanded 时旋转 180°，随卡片折叠展开 */
#panel-config .task-item-arrow {
  display: inline-flex;
  align-items: center;
  flex-shrink: 0;
  margin-left: auto;
  color: var(--color-text-muted);
  transition: transform var(--transition-smooth);
}
#panel-config .task-item-arrow svg { width: 16px; height: 16px; }
#panel-config .task-item.expanded .task-item-arrow { transform: rotate(180deg); }

/* 状态徽章：微信小标签（4px 圆角小标签；taskpool 领取卡同款方角已于
   2026-09-15 视觉规整退役回归胶囊，本条是配置页自身口径，保留不动） */
#panel-config .task-status-badge {
  border-radius: var(--radius-sm);
  font-size: 0.7rem;
  padding: 3px 8px;
  gap: 4px;
}

/* 单任务操作：删除按钮固定危险红字；runId 标签保持全局小标签 + 点击开 Job */
#panel-config .task-item-btn.danger { color: var(--color-danger); }
#panel-config .task-item-continue-btn { border-radius: var(--radius-sm); }

/* 展开区 cell 化：行容器 .task-detail-row（2026-10-30 三行式起 detail 内只剩
   解析状态行；path 行已提为 header 之下的常显行，见下方 .task-path-row），
   hairline 分隔；既有 .task-seccode-* / .task-market-* 控件 class 未动。
   2026-10-11 紧凑化（用户拍板）：行距 9→5px、行内 gap 收窄、detail 底距 12→8px */
#panel-config .task-item-detail { padding: 0 16px 8px; font-size: 13px; }
#panel-config .task-item.expanded .task-item-detail { border-top: 1px solid var(--color-border); }
#panel-config .task-detail-row {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 4px 12px;
  padding: 5px 0;
}
#panel-config .task-detail-row + .task-detail-row { border-top: 1px solid var(--color-border); }

/* path 常显行（2026-10-30 三行式：从展开区提出，header 之后始终可见、折叠也不隐藏）：
   与 header 之间 hairline + 自带横向内边距对齐 header（12px），对齐领取卡
   领取卡 .task-detail-row 的「常显 + border-top」口径 */
#panel-config .task-path-row {
  border-top: 1px solid var(--color-border);
  padding: 5px 12px;
}

/* ---- 进度概览：白卡上的凹陷信息区 + 微信细进度条（品牌绿、去旧金色光晕） ---- */
#panel-config .progress-overview {
  background: var(--color-surface-sunken);
  border: none;
  box-shadow: none;
  padding: 14px 16px;
}
#panel-config .progress-bar-wrap { height: 4px; background: var(--wx-seg-bg); border-radius: 2px; }
#panel-config .progress-bar { background: var(--color-brand); border-radius: 2px; box-shadow: none; }
#panel-config .stat-value { font-size: 1.25rem; }
#panel-config .stat-item.current .stat-value { font-size: 1.4rem; }
#panel-config .stat-label { font-size: 12px; text-transform: none; letter-spacing: 0; }

/* ---- 执行日志：凹陷黑底代码风保留（13px mono、8px 圆角） ----
   底色 #1f1f1f / 文字 #d9d9d9 为深色代码块专用：tokens 无暗色表面令牌，局部字面量；
   语义色（success/danger/warning）仍引 tokens，深底上对比达标 */
#panel-config .log-viewport {
  background: #1f1f1f;
  border: none;
  border-radius: var(--radius-md);
  box-shadow: none;
  color: #d9d9d9;
  font-size: 13px;
  padding: 14px 16px;
}
#panel-config .log-time { color: var(--color-text-secondary); }
#panel-config .log-entry.info .log-msg { color: #d9d9d9; }

/* ---- 移动端（≤768px）：布局收敛 + 紧凑档 ----
   2026-09-15 两轮：第一轮（44→40px/14→8px）用户实测「没啥改动」，第二轮
   加大一档——输入 44→34px、label 13→12px、行距 14→6px、组头/卡片全线的收。
   全部 ID 作用域压过 responsive.css 同断点的元素级规则（.form-grid gap 14px /
   input padding 11px 等）；桌面规则（上方 L918-1078 区）零改动 */
@media (max-width: 768px) {
  /* 外层透明容器与白卡：20/16→12/10、16→8px 10px */
  #panel-config .panel-inner { padding: 12px 10px; }
  #panel-config .config-section { padding: 8px 10px; }

  /* 恢复工具行按钮文字（responsive.css ≤768 把 .btn-warning/.btn-schedule 的
     span 全局藏成图标小方块，与本页「执行全部/急停」图标+文字不统一——
     2026-09-15 用户拍板四钮统一；本页作用域恢复 icon+text，几何仍 34px 档） */
  #panel-config .task-list-actions .btn-warning span,
  #panel-config .task-list-actions .btn-schedule span { display: inline; }

  /* 表单字段：行距 8→6、label 13→12px/下距 2→1px、输入 40→34px。
     输入框字号维持继承值（本就 <16px，iOS 聚焦缩放为存量现状，不新增面）；
     前置图标随 padding 收紧左移缩小，防压字 */
  #panel-config .form-grid { gap: 6px; }
  #panel-config .form-field label { font-size: 12px; margin-bottom: 1px; }
  #panel-config .form-field input,
  #panel-config .form-field textarea,
  #panel-config .form-field select { min-height: 34px; padding: 5px 8px; }
  #panel-config .form-field textarea { min-height: 48px; }
  #panel-config .form-field .input-with-icon input { padding-left: 30px; }
  #panel-config .form-field .input-with-icon svg { left: 8px; width: 14px; height: 14px; }

  /* field-header 行内小按钮（查询服务器配置）：40→30px 小规格 */
  #panel-config .field-header { margin-bottom: 2px; }
  #panel-config .field-header .btn-secondary { min-height: 30px; padding: 3px 10px; font-size: 12px; }
  #panel-config .field-header .btn-secondary svg { width: 12px; height: 12px; }

  /* 项目信息操作区：两列网格全宽按钮（40→36px） */
  #panel-config .project-info-actions {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 6px;
    padding-top: 6px;
  }
  #panel-config .project-info-actions .btn-secondary {
    width: 100%;
    min-height: 36px;
    justify-content: center;
  }

  /* 任务卡：header/展开区/进度区内边距收紧（2026-09-15 用户拍板「紧凑些」——
     原 44px 触摸档把续做/执行/删除全撑大、卡片臃肿，退役改 34px 档）。
     2026-10-30 三行式后行间 gap 改 4px（与桌面/领取卡同值；原 6px 是单行水平间距） */
  #panel-config .task-item-header { padding: 6px 8px; min-height: 36px; gap: 4px; }
  /* 行2 顶格左对齐（与序号同一起始线）——对齐领取卡既有口径（responsive.css
     2026-10-23 用户拍板「RunID 行必须与序号同一起始线」）；移动端序号 min-width
     被压到 20/18px，硬编码 36px 缩进会错位 4~6px（2026-10-30 harness 实测） */
  #panel-config .task-item-row-meta { padding-left: 0; }
  #panel-config .task-item-detail { padding: 4px 10px 8px; }
  /* path 常显行横向内边距对齐 detail（10px） */
  #panel-config .task-path-row { padding: 4px 10px; }
  #panel-config .progress-overview { padding: 8px 10px; }

  /* 行1 名称撑满由桌面统一规则承担（flex:1 1 auto），窄屏只放大防 iOS 聚焦缩放 */
  #panel-config .task-target-input { font-size: 16px; }
  #panel-config .task-item-btn { width: 34px; height: 34px; }
  #panel-config .task-item-btn svg { width: 14px; height: 14px; }
  #panel-config .task-item-continue-btn { min-height: 0; padding: 3px 8px; font-size: 12px; }

  /* 展开区控件触摸区 */
  #panel-config .task-market-select,
  #panel-config .task-path-select,
  #panel-config .task-seccode-select { min-height: 36px; padding: 4px 8px; font-size: 13px; }
}

/* ========================================
   管理页微信化（2026-09-10 P4-T4.3）
   范围：#panel-admin-config（AdminConfigUI 管理员配置页）+ #panel-taskpool-admin
   残留区块（发布区操作行 / 预览清单表 / 总览区表）。分组白卡 + cell 化 + 搜索胶囊
   视觉语言对齐 P3 的 tp-form 系 / tp-bill 系与 P4 的 #panel-config 区块；
   （注释文本禁写「类名-*」后紧邻「/」的序列——`*`+`/` 会提前闭合注释吞掉后续规则，
   2026-09-15 实锤两条同类破损：原 L516 区 48px 死规则 + 本条）
   全部新增 class 在本区块落定义（corrections 2026-08-27 口径），颜色引 tokens。
   ======================================== */

/* ---- 通用：分组白卡（组间 8px、组标题 15px 加粗、组描述 13px 二级灰） ---- */
#panel-admin-config .config-section,
#panel-taskpool-admin .config-section {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  padding: 16px;
  box-shadow: var(--shadow-sm);
}
#panel-admin-config .config-section + .config-section,
#panel-taskpool-admin .config-section + .config-section { margin-top: 8px; }
/* 总览区顶部分割线在白卡布局下退役（与 #panel-config 同口径） */
#panel-taskpool-admin .section-divider { display: none; }

#panel-admin-config .panel-header,
#panel-taskpool-admin .panel-header { margin-bottom: 14px; }
#panel-admin-config .panel-header h2,
#panel-taskpool-admin .panel-header h2 {
  font-size: 15px;
  font-weight: 600;
  letter-spacing: 0;
  margin-bottom: 2px;
}
#panel-admin-config .panel-desc,
#panel-taskpool-admin .panel-desc { font-size: 13px; color: var(--color-text-secondary); }

/* 头部操作区按钮：小规格（同 taskpool/panel-config 头部口径），允许换行防溢出 */
#panel-admin-config .panel-header-actions,
#panel-taskpool-admin .panel-header-actions { flex-wrap: wrap; row-gap: 8px; }
#panel-admin-config .panel-header-actions .btn-primary,
#panel-taskpool-admin .panel-header-actions .btn-secondary,
#panel-taskpool-admin .panel-header-actions .btn-danger {
  min-height: 34px;
  padding: 5px 12px;
  font-size: 0.78rem;
  border-radius: var(--radius-sm);
}

/* ---- 数字/表单 cell 行：label 左 / input 右 / 绿字保存，44px 高、hairline 分隔 ---- */
.admin-cell-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 4px 12px;
  min-height: 44px;
  padding: 4px 0;
}
.admin-cell-row + .admin-cell-row { border-top: 1px solid var(--color-border); }
.admin-cell-label {
  font-size: 14px;
  color: var(--color-text-primary);
  margin: 0;
  white-space: nowrap;
}
/* cell 内右侧输入：透明底右对齐（微信设置页数值 cell 口径） */
.admin-cell-input {
  width: 110px;
  min-height: 36px;
  margin-left: auto;
  padding: 6px 10px;
  border: none;
  background: transparent;
  color: var(--color-text-primary);
  font-size: 15px;
  font-family: inherit;
  text-align: right;
  outline: none;
  box-sizing: border-box;
}
.admin-cell-input:focus { color: var(--color-brand); }
/* 保存：绿字轻按钮（微信设置页「完成」式） */
.admin-cell-save {
  flex-shrink: 0;
  min-height: 34px;
  padding: 5px 14px;
  border: none;
  background: transparent;
  color: var(--color-brand);
  font-size: 14px;
  font-weight: 600;
  border-radius: var(--radius-sm);
}
.admin-cell-save:active { background: var(--wx-pressed); }
.admin-cell-save:disabled { color: var(--color-text-muted); }

/* ---- 通用小输入框（手填 user_id / 积分值 / 备注） ---- */
.admin-input {
  min-height: 36px;
  padding: 6px 10px;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);
  background: var(--color-surface-sunken);
  color: var(--color-text-primary);
  font-size: 14px;
  font-family: inherit;
  outline: none;
  box-sizing: border-box;
}
.admin-input:focus {
  border-color: var(--color-brand);
  box-shadow: 0 0 0 3px var(--color-focus-ring);
  background: var(--color-surface);
}
.admin-input--num { width: 120px; }
.admin-input--grow { flex: 1 1 140px; min-width: 0; }

/* ---- 搜索胶囊：微信搜索框（灰底圆角、36px 高、放大镜图标） ---- */
.admin-suggest-row {
  position: relative; /* 联想下拉面板（.dropdown-panel 绝对定位）的定位父容器 */
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  margin: 8px 0 4px;
}
.admin-search-capsule {
  flex: 1 1 200px;
  min-width: 0;
  display: flex;
  align-items: center;
  background: var(--color-surface-sunken);
  border-radius: var(--radius-md);
  padding: 0 12px;
}
.admin-search-capsule svg {
  width: 14px;
  height: 14px;
  flex-shrink: 0;
  color: var(--color-text-muted);
  margin-right: 6px;
}
.admin-search-input {
  flex: 1;
  min-width: 0;
  min-height: 36px;
  border: none;
  background: transparent;
  padding: 0;
  font-size: 14px;
  font-family: inherit;
  color: var(--color-text-primary);
  outline: none;
}
.admin-search-input::placeholder { color: var(--color-text-muted); }

/* ---- 联想浮层：白卡 + 44px 行高 + 按压灰高亮（对齐 #panel-config 下拉口径） ---- */
#panel-admin-config .dropdown-panel { box-shadow: var(--shadow-lg); }
#panel-admin-config .dropdown-panel .dropdown-item {
  display: flex;
  align-items: center;
  min-height: 44px;
  padding: 4px 12px;
  font-size: 14px;
  white-space: normal;
}
#panel-admin-config .dropdown-panel .dropdown-item:hover,
#panel-admin-config .dropdown-panel .dropdown-item.active {
  background: var(--wx-pressed);
  color: var(--color-text-primary);
}
#panel-admin-config .dropdown-panel .dropdown-empty {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 44px;
}

/* ---- 管理员名单 cell 列表：头像占位 + 昵称 16px + 删除红字 44px 触摸区 ---- */
.admin-user-list { margin-top: 8px; }
.admin-user-cell {
  position: relative;
  display: flex;
  align-items: center;
  gap: 12px;
  min-height: 56px;
  padding: 8px 0;
}
/* cell 间 hairline：缩进左 48px（头像宽 + 间距，对齐 .tp-bill-item 口径） */
.admin-user-cell:not(:last-child)::after {
  content: '';
  position: absolute;
  left: 48px;
  right: 0;
  bottom: 0;
  height: 1px;
  background: var(--color-border);
  transform: scaleY(0.5);
  transform-origin: bottom;
}
.admin-user-avatar {
  width: 36px;
  height: 36px;
  border-radius: 50%;
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--color-brand-subtle);
  color: var(--color-brand);
  font-size: 15px;
  font-weight: 600;
}
.admin-user-info { flex: 1; min-width: 0; }
.admin-user-name {
  font-size: 16px;
  color: var(--color-text-primary);
  line-height: 1.4;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.admin-user-meta {
  font-size: 12px;
  color: var(--color-text-muted);
  margin-top: 2px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.admin-user-del {
  flex-shrink: 0;
  width: 44px;
  height: 44px;
  border: none;
  background: transparent;
  color: var(--color-danger);
  font-size: 14px;
  border-radius: var(--radius-sm);
}
.admin-user-del:active { background: var(--wx-pressed); }
.admin-user-del:disabled { color: var(--color-text-muted); }

/* ---- 积分概况结果区：余额突出白卡（sunken 区大号数字）----
   流水列表复用 P3 .tp-bill-* 账单视觉语言（本文件上方已定义，零新增） */
.admin-points-summary {
  background: var(--color-surface-sunken);
  border-radius: var(--radius-md);
  padding: 14px 16px;
  margin: 8px 0;
}
.admin-points-user { font-size: 13px; color: var(--color-text-secondary); }
.admin-points-balance {
  font-size: 30px;
  font-weight: 700;
  color: var(--color-text-primary);
  line-height: 1.3;
  font-variant-numeric: tabular-nums;
  margin: 2px 0;
}
.admin-points-unit {
  font-size: 12px;
  font-weight: 400;
  color: var(--color-text-muted);
  margin-left: 8px;
}
.admin-points-sub {
  display: flex;
  flex-wrap: wrap;
  gap: 4px 14px;
  font-size: 12px;
  color: var(--color-text-secondary);
  font-variant-numeric: tabular-nums;
}

/* ---- 管理积分任务页：发布区操作行 + 发布大按钮 + 清单/总览表白卡 ---- */
.tp-admin-actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  margin: 10px 0 4px;
}
/* 「发布当前清单」微信绿大按钮（48px 高主操作，管理页表单主按钮口径；
   原「对齐 #taskpool-claim-btn」引用已失效——该按钮 2026-09-15 视觉规整
   退役 48px 改统一 34px 紧凑档，管理页发布大按钮规格保持不动） */
#taskpool-admin-publish {
  flex: 1 1 200px;
  min-height: 48px;
  padding: 11px 24px;
  font-size: 1rem;
  border-radius: var(--radius-md);
}
#taskpool-admin-add-row,
#taskpool-admin-clear-list { min-height: 40px; padding: 8px 16px; }

/* 清单/总览/待复核表：白卡圆角容器 + 窄屏横向滚动兜底（表格不破版） */
.tp-admin-table-wrap {
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  margin: 8px 0;
}
.tp-admin-table-wrap .params-table { min-width: 720px; margin: 0; border: none; }

/* ---- 移动端（≤768px）：表单单列、按钮 ≥44px 触摸区 ---- */
@media (max-width: 768px) {
  #panel-admin-config .config-section,
  #panel-taskpool-admin .config-section { padding: 12px; }

  /* cell 行单列化：输入占满一行 */
  .admin-cell-input { flex: 1 1 110px; }
  .admin-suggest-row .admin-search-capsule { flex: 1 1 100%; }
  .admin-input { font-size: 16px; } /* ≥16px 防 iOS 聚焦自动放大 */

  /* 触摸区拉满 44px */
  #panel-admin-config .btn-primary,
  #panel-admin-config .btn-secondary { min-height: 44px; }
  #panel-taskpool-admin .taskpool-filter-row button,
  #panel-taskpool-admin .taskpool-page-btn,
  #panel-taskpool-admin .taskpool-item-remove,
  #panel-taskpool-admin .taskpool-search-input { min-height: 44px; }
  #taskpool-admin-add-row,
  #taskpool-admin-clear-list { min-height: 44px; }

  /* 单页双分组：组头可点击折叠，触控区 ≥44px */
  #taskpool-view .taskpool-group-header { min-height: 44px; }
}
