/* V0 factory dashboard — extracted from v0_mockup.html.
   Covers roadmap Kanban + overview KPI/grid + monitor panels (FE-1). */

/* Tabs */
/* Legacy .v0-tabs CSS — top tab bar replaced with sidebar nav (chen 5/8). */
/* nav-sub: V0 sidebar 子项缩进，跟 .nav-item 同基础样式 + 多 8px 缩进 */
.nav-sub { padding-left:20px !important; font-size:13px; }
.nav-sub.active { border-left-color:#38bdf8; padding-left:18px !important; }
.nav-sub .tab-badge { background:#f87171; color:#fff; font-size:10px; padding:1px 6px; border-radius:8px; font-weight:600; margin-left:6px; }

/* Pipeline status banner (5 components) */
.pipeline-banner { display:grid; grid-template-columns:repeat(5, 1fr); gap:12px; background:#1a1a18; border:1px solid rgba(255,255,255,0.06); border-radius:12px; padding:16px 18px; margin-bottom:20px; position:relative; }
.pipe-node { display:flex; flex-direction:column; gap:4px; }
.pipe-idx { font-size:10px; color:rgba(255,255,255,0.3); font-family:ui-monospace,monospace; letter-spacing:0.5px; }
.pipe-name { font-size:13px; font-weight:600; color:rgba(255,255,255,0.85); }
.pipe-tech { font-size:10px; color:rgba(255,255,255,0.4); font-family:ui-monospace,monospace; }
.pipe-status { font-size:11px; margin-top:2px; font-family:ui-monospace,monospace; }
.pipe-status.live { color:#4ade80; }
.pipe-status.idle { color:rgba(255,255,255,0.35); }
.pipe-status.warn { color:#fbbf24; }

/* Kanban — 未启动 / 试生产待审 / P1 / P2 / P3 / 已收敛 (6 cols) + 驳回池抽屉 */
.kanban { display:grid; grid-template-columns:repeat(6, 1fr); gap:12px; margin-top:8px; }
.kanban-col { background:#1a1a18; border-radius:10px; padding:12px; border:1px solid rgba(255,255,255,0.04); min-height:600px; }
.kanban-col-header { display:flex; justify-content:space-between; align-items:center; padding:6px 4px 12px; border-bottom:1px solid rgba(255,255,255,0.06); margin-bottom:12px; }
.kanban-col-title { font-size:12px; font-weight:600; letter-spacing:0.3px; color:rgba(255,255,255,0.7); }
.kanban-col-count { font-size:11px; color:rgba(255,255,255,0.3); font-family:ui-monospace,monospace; }
.kanban-col.col-queue .kanban-col-title::before { content:'⏸ '; }
.kanban-col.col-trial .kanban-col-title::before { content:'🆕 '; }
.kanban-col.col-p1 .kanban-col-title::before { content:'🟡 '; }
.kanban-col.col-p2 .kanban-col-title::before { content:'🔵 '; }
.kanban-col.col-p3 .kanban-col-title::before { content:'🟣 '; }
.kanban-col.col-done .kanban-col-title::before { content:'✅ '; }
.kanban-col.col-exhausted .kanban-col-title::before { content:'☠️ '; }
.kanban-col.col-trial-failed .kanban-col-title::before { content:'❌ '; }
.kanban-col.col-trial { border-color:rgba(251,191,36,0.25); }
.kanban-col.col-done { border-color:rgba(74,222,128,0.2); }
.kanban-col.col-exhausted { border-color:rgba(248,113,113,0.20); }
.kanban-col.col-trial-failed { border-color:rgba(248,113,113,0.20); }

/* Drawer — 暂停 / 驳回池 */
.rejected-drawer { margin-top:16px; background:#1a1a18; border:1px solid rgba(255,255,255,0.06); border-radius:8px; padding:12px 16px 16px; }
.rejected-drawer-head { display:flex; justify-content:space-between; align-items:center; padding-bottom:12px; border-bottom:1px solid rgba(255,255,255,0.06); margin-bottom:12px; }
.rejected-drawer-title { font-size:12px; color:rgba(255,255,255,0.7); font-weight:500; }
.rejected-drawer-count { font-size:11px; color:rgba(255,255,255,0.4); font-family:ui-monospace,monospace; }
.rejected-drawer-cards { display:grid; grid-template-columns:repeat(6, 1fr); gap:12px; }
.rejected-drawer-cards .meme-card { margin-bottom:0; opacity:0.85; }

/* Coming-soon 占位（Tab 2 / 3 / 5 / 7） */
.coming-soon { background:#1a1a18; border:1px dashed rgba(255,255,255,0.1); border-radius:12px; padding:48px 28px; text-align:center; margin-top:24px; }
.cs-title { font-size:22px; font-weight:600; color:rgba(255,255,255,0.85); margin-bottom:6px; }
.cs-meta { font-size:12px; color:#38bdf8; font-family:ui-monospace,monospace; margin-bottom:20px; letter-spacing:0.3px; }
.cs-note { font-size:13px; color:rgba(255,255,255,0.55); line-height:22px; max-width:640px; margin:0 auto; }
.cs-note code { background:rgba(255,255,255,0.05); padding:2px 6px; border-radius:3px; font-size:12px; color:#a78bfa; font-family:ui-monospace,monospace; }
.cs-note strong { color:rgba(255,255,255,0.85); }

.meme-card { background:#222; border:1px solid rgba(255,255,255,0.06); border-radius:8px; padding:12px; margin-bottom:10px; cursor:default; transition:all 0.15s; }
.meme-card:hover { border-color:rgba(56,189,248,0.3); background:#2a2a28; }
.meme-card-head { display:flex; justify-content:space-between; align-items:flex-start; margin-bottom:6px; gap:8px; }
.meme-card-id { font-size:10px; color:rgba(255,255,255,0.35); font-family:ui-monospace,monospace; font-weight:600; letter-spacing:0.3px; }
.meme-card-name { font-size:13px; font-weight:500; color:rgba(255,255,255,0.85); line-height:18px; margin-bottom:6px; }
.meme-card-vars { display:flex; flex-wrap:wrap; gap:3px; margin-bottom:8px; }
.v-chip { font-size:10px; padding:2px 6px; border-radius:4px; background:rgba(255,255,255,0.04); color:rgba(255,255,255,0.55); font-family:ui-monospace,monospace; }
.v-chip.A { background:rgba(56,189,248,0.08); color:#38bdf8; }
.v-chip.B { background:rgba(167,139,250,0.08); color:#a78bfa; }
.v-chip.C { background:rgba(74,222,128,0.08); color:#4ade80; }
.v-chip.D { background:rgba(251,191,36,0.08); color:#fbbf24; }
.meme-card-phase { font-size:10px; color:rgba(255,255,255,0.4); font-family:ui-monospace,monospace; margin-bottom:6px; }
.meme-card-progress { height:4px; background:rgba(255,255,255,0.04); border-radius:2px; overflow:hidden; margin-bottom:8px; }
.meme-card-progress-fill { height:100%; border-radius:2px; }
.meme-card-meta { display:flex; justify-content:space-between; font-size:10px; color:rgba(255,255,255,0.35); font-family:ui-monospace,monospace; }
.dim-tag { font-size:9px; padding:1px 5px; border-radius:3px; background:rgba(255,255,255,0.04); color:rgba(255,255,255,0.55); font-family:ui-monospace,monospace; }

.phase-pill { display:inline-block; padding:1px 6px; border-radius:3px; font-size:9px; font-weight:600; font-family:ui-monospace,monospace; letter-spacing:0.3px; }
.phase-pill.ph1 { background:rgba(251,191,36,0.12); color:#fbbf24; }
.phase-pill.ph2 { background:rgba(56,189,248,0.12); color:#38bdf8; }
.phase-pill.ph3 { background:rgba(167,139,250,0.12); color:#a78bfa; }
.phase-pill.conv { background:rgba(74,222,128,0.15); color:#4ade80; }
.phase-pill.blocked { background:rgba(248,113,113,0.12); color:#fca5a5; }
.phase-pill.queue { background:rgba(255,255,255,0.05); color:rgba(255,255,255,0.5); }
.phase-pill.trial { background:rgba(251,191,36,0.15); color:#fbbf24; }
.phase-pill.trial-gen { background:rgba(251,191,36,0.15); color:#fbbf24; }
.phase-pill.trial-ready { background:rgba(56,189,248,0.18); color:#38bdf8; font-weight:600; }
.phase-pill.paused { background:rgba(251,191,36,0.15); color:#fbbf24; }

/* Overview — KPI stat cards + 48-meme grid */
.stat-card { background:#1a1a18; border:1px solid rgba(255,255,255,0.06); border-radius:10px; padding:14px 16px; }
.stat-card-label { font-size:10px; text-transform:uppercase; letter-spacing:0.5px; color:rgba(255,255,255,0.45); margin-bottom:6px; }
.stat-card-value { font-size:24px; font-weight:600; font-family:ui-monospace,monospace; color:rgba(255,255,255,0.9); }

.overview-grid { margin-top:16px; }
.overview-table { width:100%; border-collapse:collapse; font-size:12px; }
.overview-table thead th { text-align:left; padding:8px 8px; background:rgba(255,255,255,0.03); color:rgba(255,255,255,0.55); font-weight:500; border-bottom:1px solid rgba(255,255,255,0.08); white-space:nowrap; position:sticky; top:0; user-select:none; }
.ovr-sortable { cursor:pointer; }
.ovr-sortable:hover { color:#7dd3fc; background:rgba(56,189,248,0.04); }
.overview-table tbody td { padding:7px 8px; border-bottom:1px solid rgba(255,255,255,0.04); vertical-align:middle; }
.overview-row { cursor:pointer; transition:background 0.1s; }
.overview-row:hover { background:rgba(56,189,248,0.04); }
.ovr-code { color:#7dd3fc; font-family:ui-monospace,monospace; font-weight:500; white-space:nowrap; }
.ovr-name { color:rgba(255,255,255,0.92); white-space:nowrap; max-width:180px; overflow:hidden; text-overflow:ellipsis; }
.ovr-mono { font-family:ui-monospace,monospace; color:rgba(255,255,255,0.78); }
.ovr-num { text-align:right; }
.ovr-cpi { color:#4ade80; font-weight:500; }
.ovr-dim { color:rgba(255,255,255,0.40); font-size:11px; }
.ovr-phase { display:inline-block; padding:2px 7px; border-radius:3px; font-size:11px; }
.ovr-phase-1 { background:rgba(251,191,36,0.10); color:#fbbf24; }
.ovr-phase-2 { background:rgba(56,189,248,0.10); color:#38bdf8; }
.ovr-phase-3 { background:rgba(168,85,247,0.10); color:#c084fc; }
.ovr-phase-done { background:rgba(74,222,128,0.10); color:#4ade80; }
.ovr-phase-drawer { background:rgba(248,113,113,0.10); color:#f87171; }
.ovr-phase-queue, .ovr-phase-trial { background:rgba(255,255,255,0.05); color:rgba(255,255,255,0.55); }
.ovr-status { font-size:11px; white-space:nowrap; }
.mini-meme { background:#222; border:1px solid rgba(255,255,255,0.06); border-radius:6px; padding:10px; aspect-ratio:1.1; display:flex; flex-direction:column; justify-content:space-between; cursor:default; position:relative; }
.mini-meme.m-conv { border-left:3px solid #4ade80; }
.mini-meme.m-p3 { border-left:3px solid #a78bfa; }
.mini-meme.m-p2 { border-left:3px solid #38bdf8; }
.mini-meme.m-p1 { border-left:3px solid #fbbf24; }
.mini-meme.m-blocked { border-left:3px solid #f87171; background:rgba(248,113,113,0.04); }
.mini-meme.m-paused { border-left:3px solid #fbbf24; background:rgba(251,191,36,0.04); }
.mini-meme.m-queue { border-left:3px solid rgba(255,255,255,0.15); opacity:0.55; }
.mini-id { font-size:10px; color:rgba(255,255,255,0.4); font-family:ui-monospace,monospace; font-weight:600; }
.mini-name { font-size:10px; color:rgba(255,255,255,0.7); margin-top:2px; line-height:13px; overflow:hidden; text-overflow:ellipsis; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; }
.mini-phase { font-size:10px; color:rgba(255,255,255,0.55); font-family:ui-monospace,monospace; margin-top:2px; }
.mini-cpi { font-size:10px; color:#4ade80; font-family:ui-monospace,monospace; }

.alert-box { background:rgba(248,113,113,0.06); border:1px solid rgba(248,113,113,0.2); border-radius:8px; padding:12px 16px; margin-bottom:10px; display:flex; align-items:center; gap:12px; font-size:13px; }
.alert-box.warn { background:rgba(251,191,36,0.06); border-color:rgba(251,191,36,0.2); }
.alert-box.ok { background:rgba(74,222,128,0.06); border-color:rgba(74,222,128,0.2); }
.alert-box .alert-icon { color:#fca5a5; font-size:16px; }
.alert-box.warn .alert-icon { color:#fbbf24; }
.alert-box.ok .alert-icon { color:#4ade80; }
.alert-box .alert-text { flex:1; color:rgba(255,255,255,0.8); }

/* Monitor */
.monitor-section { margin-bottom:28px; }
.monitor-sec-head { display:flex; justify-content:space-between; align-items:center; margin-bottom:12px; padding-bottom:8px; border-bottom:1px solid rgba(255,255,255,0.06); }
.monitor-sec-title { font-size:13px; font-weight:600; color:rgba(255,255,255,0.85); display:flex; align-items:center; gap:8px; }
.monitor-sec-title .idx { font-size:10px; color:rgba(255,255,255,0.35); font-family:ui-monospace,monospace; }
.monitor-sec-meta { font-size:11px; color:rgba(255,255,255,0.45); font-family:ui-monospace,monospace; }

.queue-summary { display:grid; grid-template-columns:repeat(5, 1fr); gap:10px; margin-bottom:12px; }
.queue-stat { background:#1a1a18; border:1px solid rgba(255,255,255,0.06); border-radius:8px; padding:12px 14px; }
.queue-stat-label { font-size:10px; color:rgba(255,255,255,0.4); text-transform:uppercase; letter-spacing:0.5px; margin-bottom:6px; }
.queue-stat-val { font-size:20px; font-weight:600; font-family:ui-monospace,monospace; color:rgba(255,255,255,0.9); }
.queue-stat-sub { font-size:10px; color:rgba(255,255,255,0.35); margin-top:2px; font-family:ui-monospace,monospace; }

.task-list { display:flex; flex-direction:column; gap:6px; }
.task-item { background:#1a1a18; border:1px solid rgba(255,255,255,0.06); border-radius:6px; padding:10px 12px; display:grid; grid-template-columns:70px 80px 1fr 140px; gap:10px; align-items:center; font-size:11px; }
.task-item.failed { border-left:3px solid #f87171; }
.task-item.published { border-left:3px solid #4ade80; }
.task-item-gene { font-family:ui-monospace,monospace; color:rgba(255,255,255,0.65); font-weight:600; }
.task-item-arm { font-size:10px; padding:2px 6px; border-radius:3px; text-align:center; font-family:ui-monospace,monospace; }
.task-item-arm.variable { background:rgba(56,189,248,0.12); color:#38bdf8; }
.task-item-arm.rewrite { background:rgba(244,114,182,0.12); color:#f472b6; }
.task-item-body { color:rgba(255,255,255,0.7); font-family:ui-monospace,monospace; font-size:11px; word-break:break-word; }
.task-item-body.err { color:#fca5a5; }
.task-item-ts { font-family:ui-monospace,monospace; color:rgba(255,255,255,0.4); text-align:right; }
.task-item-ts a { color:#38bdf8; text-decoration:none; }

.empty-note { padding:24px; text-align:center; color:rgba(255,255,255,0.35); font-size:12px; font-style:italic; }
.loading-note { padding:24px; text-align:center; color:rgba(255,255,255,0.5); font-size:12px; }

/* Buttons */
.btn { display:inline-flex; align-items:center; gap:6px; padding:8px 14px; font-size:12px; background:#222; border:1px solid rgba(255,255,255,0.08); color:rgba(255,255,255,0.85); border-radius:6px; cursor:pointer; font-family:inherit; transition:all 0.15s; }
.btn:hover { border-color:rgba(56,189,248,0.3); background:#2a2a28; }
.btn:disabled { opacity:0.5; cursor:not-allowed; }
.btn.btn-primary { background:#38bdf8; color:#0a0a09; font-weight:600; border-color:#38bdf8; }
.btn.btn-primary:hover { background:#5ccef9; }

/* ───── Tab 2 · 梗方案卡 (Gate A) ───── */
.plan-head { display:flex; justify-content:space-between; align-items:center; padding:18px 20px; background:#1a1a18; border:1px solid rgba(255,255,255,0.06); border-radius:10px; margin-bottom:16px; }
.plan-head-id { display:flex; gap:12px; align-items:baseline; }
.plan-head-code { font-family:ui-monospace,monospace; font-size:13px; color:rgba(255,255,255,0.45); font-weight:600; }
.plan-head-name { font-size:18px; color:rgba(255,255,255,0.95); font-weight:600; }
.plan-head-status { display:flex; align-items:center; gap:8px; font-size:13px; font-weight:500; }
.plan-status-dot { width:8px; height:8px; border-radius:50%; display:inline-block; }

.plan-grid { display:grid; grid-template-columns:1fr 1fr 1fr; gap:12px; margin-bottom:16px; }
.plan-var-block { background:rgba(56,189,248,0.05); border:1px solid rgba(56,189,248,0.12); border-radius:6px; padding:8px 10px; margin-bottom:6px; }
.plan-var-block-head { font-size:11px; color:#38bdf8; font-weight:600; font-family:ui-monospace,monospace; margin-bottom:4px; }
.plan-var-block-head .plan-var-count { color:rgba(255,255,255,0.4); font-weight:400; margin-left:4px; }
.plan-var-item { font-size:11px; color:rgba(255,255,255,0.75); padding:2px 0; line-height:16px; }
.plan-var-letter { display:inline-block; min-width:14px; color:rgba(56,189,248,0.7); font-family:ui-monospace,monospace; font-weight:600; margin-right:4px; }
.plan-defaults { display:flex; flex-direction:column; gap:8px; }
.plan-defaults-row { display:flex; align-items:flex-start; gap:8px; font-size:12px; line-height:18px; }
.plan-defaults-label { flex:0 0 auto; min-width:88px; color:rgba(255,255,255,0.45); font-size:11px; }
.plan-defaults-code { display:inline-block; background:rgba(56,189,248,0.12); color:#38bdf8; font-family:ui-monospace,monospace; font-size:11px; padding:1px 6px; border-radius:3px; margin-right:4px; }
.plan-defaults-tag { display:inline-block; background:rgba(74,222,128,0.12); color:#4ade80; font-size:11px; padding:1px 6px; border-radius:3px; margin-right:4px; }
.plan-defaults-none { color:rgba(255,255,255,0.35); font-size:11px; font-style:italic; }

/* 5/12 维度分布: roadmap 下的 V1-V8 覆盖 bar 图 (V_DIM_META 在 v0.js 里) */
.dim-dist-wrap { background:rgba(255,255,255,0.02); border:1px solid rgba(255,255,255,0.06); border-radius:8px; padding:16px 18px; }
.dim-dist-title { font-size:14px; font-weight:600; color:rgba(255,255,255,0.85); margin-bottom:4px; }
.dim-dist-hint { font-size:11px; color:rgba(255,255,255,0.4); margin-bottom:14px; }
.dim-dist-empty { font-size:12px; color:rgba(255,255,255,0.35); padding:24px; text-align:center; border:1px dashed rgba(255,255,255,0.08); border-radius:6px; }
.dim-dist-grid { display:grid; grid-template-columns:repeat(2,1fr); gap:18px 28px; }
@media (max-width:1100px) { .dim-dist-grid { grid-template-columns:1fr; } }
.dim-dist-section-head { font-size:12px; font-weight:600; font-family:ui-monospace,monospace; letter-spacing:0.4px; margin-bottom:6px; padding-bottom:4px; border-bottom:1px solid rgba(255,255,255,0.06); }
.dim-dist-row { display:grid; grid-template-columns:84px 1fr 36px; gap:8px; align-items:center; padding:2px 0; font-size:11px; }
.dim-dist-row-label { color:rgba(255,255,255,0.7); text-align:right; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.dim-dist-row-bar { position:relative; height:18px; background:rgba(255,255,255,0.03); border-radius:3px; overflow:hidden; }
.dim-dist-row-fill { position:absolute; left:0; top:0; bottom:0; border-radius:3px; transition:width 0.2s ease; }
.dim-dist-num { position:relative; z-index:1; color:rgba(255,255,255,0.95); font-weight:600; font-family:ui-monospace,monospace; font-size:11px; padding-left:8px; line-height:18px; }
.dim-dist-num-zero { position:relative; z-index:1; color:rgba(255,255,255,0.25); font-family:ui-monospace,monospace; font-size:11px; padding-left:8px; line-height:18px; }
.dim-dist-row-code { color:rgba(255,255,255,0.3); font-family:ui-monospace,monospace; font-size:10px; }

/* Plan anchor row (chen 5/8 PR 4c — show control/rewrite arm source bots) */
.plan-anchor-row { display:flex; flex-direction:column; gap:8px; padding:10px 12px; background:rgba(255,255,255,0.02); border:1px solid rgba(255,255,255,0.06); border-radius:5px; margin-bottom:8px; font-size:12px; }
.plan-anchor-row-head { display:flex; align-items:center; gap:12px; flex-wrap:wrap; }
.plan-anchor-row-body { display:flex; flex-direction:column; gap:4px; padding-left:0; }
.plan-anchor-id { color:#7dd3fc; font-family:ui-monospace,monospace; text-decoration:none; flex:1; }
.plan-anchor-id:hover { text-decoration:underline; }
.plan-anchor-src { font-size:11px; padding:2px 7px; border-radius:3px; }
.plan-anchor-src-attr { background:rgba(168,85,247,0.10); color:#c084fc; border:1px solid rgba(168,85,247,0.20); }
.plan-anchor-src-csv { background:rgba(255,255,255,0.04); color:rgba(255,255,255,0.55); border:1px solid rgba(255,255,255,0.08); }
.plan-anchor-gender { font-size:11px; color:rgba(255,255,255,0.55); font-family:ui-monospace,monospace; }
.plan-anchor-field { font-size:11px; }
.plan-anchor-field summary { cursor:pointer; padding:4px 0; color:rgba(255,255,255,0.55); user-select:none; outline:none; }
.plan-anchor-field summary:hover { color:rgba(255,255,255,0.78); }
.plan-anchor-field[open] summary { color:rgba(255,255,255,0.78); }
.plan-anchor-field-len { color:rgba(255,255,255,0.40); font-family:ui-monospace,monospace; margin-left:6px; }
.plan-anchor-field-body { padding:8px 10px; background:rgba(255,255,255,0.02); border:1px solid rgba(255,255,255,0.05); border-radius:4px; color:rgba(255,255,255,0.85); white-space:pre-wrap; line-height:1.5; max-height:300px; overflow-y:auto; word-break:break-word; }
.plan-anchor-field-body.empty { color:rgba(255,255,255,0.30); font-style:italic; }
.empty-note.error { color:#fca5a5; }
.export-date-input { padding:5px 8px; background:#0f0f0e; border:1px solid rgba(255,255,255,0.10); border-radius:4px; color:rgba(255,255,255,0.92); font-size:12px; font-family:ui-monospace,monospace; outline:none; }
.export-date-input:focus { border-color:rgba(56,189,248,0.45); }
.task-row { padding:8px 10px; background:rgba(255,255,255,0.02); border:1px solid rgba(255,255,255,0.06); border-radius:5px; margin-bottom:5px; }
.plan-card { background:#1a1a18; border:1px solid rgba(255,255,255,0.05); border-radius:10px; padding:16px; }
.plan-card-label { font-size:11px; color:rgba(255,255,255,0.4); text-transform:uppercase; letter-spacing:0.5px; margin-bottom:12px; font-weight:600; }
.plan-card-meta { font-size:11px; color:rgba(255,255,255,0.45); margin-top:10px; font-family:ui-monospace,monospace; }
.plan-vars { display:flex; gap:8px; flex-wrap:wrap; }
.plan-var { background:rgba(56,189,248,0.08); border:1px solid rgba(56,189,248,0.18); border-radius:6px; padding:8px 12px; min-width:64px; text-align:center; }
.plan-var-label { font-size:10px; color:#38bdf8; font-weight:600; font-family:ui-monospace,monospace; }
.plan-var-count { font-size:13px; color:rgba(255,255,255,0.85); margin-top:2px; }
.plan-nums { display:grid; grid-template-columns:repeat(4,1fr); gap:12px; }
.plan-nums > div { text-align:center; }
.plan-num-v { display:block; font-size:22px; font-weight:600; color:rgba(255,255,255,0.9); font-family:ui-monospace,monospace; }
.plan-num-l { display:block; font-size:10px; color:rgba(255,255,255,0.4); margin-top:4px; text-transform:uppercase; letter-spacing:0.5px; }

.plan-section { background:#1a1a18; border:1px solid rgba(255,255,255,0.05); border-radius:10px; padding:16px; margin-bottom:12px; }
.plan-sec-title { font-size:12px; color:rgba(255,255,255,0.55); margin-bottom:10px; text-transform:uppercase; letter-spacing:0.5px; font-weight:600; }
.plan-sec-title span { color:rgba(255,255,255,0.35); font-size:11px; font-weight:400; margin-left:6px; text-transform:none; letter-spacing:0; }
.plan-sec-body { font-size:12px; color:rgba(255,255,255,0.7); line-height:18px; }

.plan-rej-item { padding:10px 0; border-bottom:1px solid rgba(255,255,255,0.05); }
.plan-rej-item:last-child { border-bottom:none; }
.plan-rej-head { display:flex; gap:10px; font-size:11px; color:rgba(255,255,255,0.45); font-family:ui-monospace,monospace; margin-bottom:4px; }
.plan-rej-by { color:rgba(255,255,255,0.6); }
.plan-rej-body { font-size:12px; color:rgba(255,255,255,0.85); line-height:18px; white-space:pre-wrap; }

/* Trial Preview · 3 bot 样本 — full-content审核视图。
   per 马舒畅 2026-04-27 反馈：description / initPrompt / welcomeMessage 一律
   全文展开，不 truncate、不外套 max-h+overflow:auto、不"展开/收起" —— 审核者
   要靠这几段判断 trial 是否值得 approve。 */
/* PR #167: 大 trial 分组容器 — trial / control / rewrite 三段一坨送审 */
.trial-arm-section { margin-bottom:18px; }
.trial-arm-section:last-child { margin-bottom:0; }
.trial-arm-header { display:flex; align-items:baseline; gap:10px; padding:6px 10px; margin-bottom:8px; background:rgba(255,255,255,0.025); border-left:3px solid rgba(56,189,248,0.4); border-radius:3px; }
.trial-arm-title { font-size:13px; font-weight:600; color:rgba(255,255,255,0.92); }
.trial-arm-count { font-size:11px; color:rgba(56,189,248,0.7); font-family:ui-monospace,monospace; }
.trial-arm-desc { font-size:11px; color:rgba(255,255,255,0.4); flex:1; }

.trial-bot-card { padding:14px; margin-bottom:12px; background:#0f0f0e; border:1px solid rgba(255,255,255,0.07); border-radius:8px; }
.trial-bot-card:last-child { margin-bottom:0; }
.trial-bot-head { display:flex; align-items:center; gap:10px; margin-bottom:8px; flex-wrap:wrap; }
.trial-bot-idx { font-size:13px; font-weight:600; color:rgba(255,255,255,0.85); }
.trial-bot-combo-zh { font-size:13px; font-weight:500; color:rgba(255,255,255,0.92); padding:2px 9px; background:rgba(56,189,248,0.16); border:1px solid rgba(56,189,248,0.32); border-radius:10px; }
.trial-bot-combo { font-size:10px; color:rgba(255,255,255,0.42); font-family:ui-monospace,monospace; padding:2px 7px; background:rgba(255,255,255,0.04); border-radius:10px; }
.trial-bot-anchor { font-size:10px; color:rgba(168,85,247,0.85); font-family:ui-monospace,monospace; padding:2px 7px; background:rgba(168,85,247,0.10); border:1px solid rgba(168,85,247,0.22); border-radius:4px; }
.trial-bot-arm-tag { font-size:10px; padding:2px 7px; border-radius:4px; font-weight:500; }
.trial-bot-arm-tag.control { color:rgba(34,197,94,0.95); background:rgba(34,197,94,0.10); border:1px solid rgba(34,197,94,0.25); }
.trial-bot-arm-tag.rewrite { color:rgba(168,85,247,0.95); background:rgba(168,85,247,0.10); border:1px solid rgba(168,85,247,0.25); }
.trial-bot-arm-tag.replicate { color:rgba(251,146,60,0.95); background:rgba(251,146,60,0.10); border:1px solid rgba(251,146,60,0.25); }
.trial-bot-arm-tag.trial { color:rgba(59,130,246,0.95); background:rgba(59,130,246,0.10); border:1px solid rgba(59,130,246,0.25); }
.trial-bot-arm-tag.variable { color:rgba(59,130,246,0.95); background:rgba(59,130,246,0.10); border:1px solid rgba(59,130,246,0.25); }
.trial-bot-status { font-size:11px; font-weight:500; }
.trial-bot-enc { display:flex; gap:6px; flex-wrap:wrap; margin-bottom:10px; }
.trial-enc-chip { font-size:11px; color:rgba(255,255,255,0.78); padding:2px 8px; background:rgba(56,189,248,0.10); border:1px solid rgba(56,189,248,0.22); border-radius:4px; }
.trial-bot-error { font-size:12px; color:#f87171; padding:8px 10px; margin-bottom:10px; background:rgba(248,113,113,0.08); border:1px solid rgba(248,113,113,0.25); border-radius:6px; white-space:pre-wrap; }
.trial-bot-field { margin-bottom:12px; }
.trial-bot-field:last-child { margin-bottom:0; }
.trial-bot-field-collapsible > summary.trial-bot-field-label { cursor:pointer; user-select:none; list-style:none; display:flex; align-items:baseline; gap:6px; padding:4px 0; }
.trial-bot-field-collapsible > summary.trial-bot-field-label::-webkit-details-marker { display:none; }
.trial-bot-field-collapsible > summary.trial-bot-field-label::before { content:'▸'; font-size:10px; color:rgba(255,255,255,0.4); transition:transform 0.12s; flex-shrink:0; }
.trial-bot-field-collapsible[open] > summary.trial-bot-field-label::before { transform:rotate(90deg); }
.trial-bot-field-collapsible > summary.trial-bot-field-label:hover { color:rgba(255,255,255,0.75); }
.trial-bot-field-collapsible > .trial-bot-field-body { margin-top:4px; }
.trial-bot-field-label { font-size:11px; color:rgba(255,255,255,0.45); margin-bottom:4px; text-transform:uppercase; letter-spacing:0.4px; font-weight:600; }
.trial-bot-field-len { color:rgba(255,255,255,0.3); font-weight:400; margin-left:4px; text-transform:none; letter-spacing:0; }
.trial-bot-field-body { font-size:12.5px; color:rgba(255,255,255,0.88); line-height:19px; white-space:pre-wrap; word-wrap:break-word; padding:8px 10px; background:rgba(255,255,255,0.02); border-radius:5px; }
.trial-bot-field-body.empty { color:rgba(255,255,255,0.3); font-style:italic; }
.trial-bot-cover { display:block; width:160px; height:240px; object-fit:cover; border-radius:6px; border:1px solid rgba(255,255,255,0.08); margin-bottom:12px; background:rgba(255,255,255,0.02); }
.trial-bot-cover-missing { display:flex; flex-direction:column; justify-content:center; align-items:flex-start; width:160px; min-height:120px; padding:12px 14px; margin-bottom:12px; border-radius:6px; border:1px dashed rgba(248,113,113,0.45); background:rgba(248,113,113,0.06); font-size:11.5px; line-height:1.55; color:rgba(248,113,113,0.95); font-family:ui-monospace,SFMono-Regular,Menlo,monospace; word-break:break-word; }
.trial-bot-cover-missing .label { display:block; font-weight:600; margin-bottom:4px; letter-spacing:0.3px; }
.trial-bot-cover-missing .detail { font-size:11px; color:rgba(248,113,113,0.75); }

/* 失败率分析表 (PR #15? 陈啸林 5/15: 区分时间波动 vs 内容风控) */
.failure-table-wrap { max-height:420px; overflow-y:auto; border:1px solid rgba(255,255,255,0.06); border-radius:6px; background:rgba(255,255,255,0.01); }
.failure-table { width:100%; border-collapse:collapse; font-size:11.5px; font-family:ui-monospace,SFMono-Regular,Menlo,monospace; }
.failure-table thead th { position:sticky; top:0; background:#1a1a18; color:rgba(255,255,255,0.6); font-weight:500; font-size:11px; padding:8px 10px; text-align:right; border-bottom:1px solid rgba(255,255,255,0.08); cursor:pointer; user-select:none; }
.failure-table thead th:first-child { text-align:left; }
.failure-table thead th.sortable:hover { color:rgba(255,255,255,0.9); }
.failure-table tbody td { padding:6px 10px; border-bottom:1px solid rgba(255,255,255,0.04); text-align:right; color:rgba(255,255,255,0.8); }
.failure-table tbody td:first-child { text-align:left; color:rgba(255,255,255,0.95); }
.failure-table tbody tr:hover td { background:rgba(255,255,255,0.03); }
.failure-table .rate-cell { font-weight:500; }
.failure-table .rate-cell.high { color:#f87171; }
.failure-table .rate-cell.mid { color:#fbbf24; }
.failure-table .rate-cell.low { color:rgba(255,255,255,0.55); }
.failure-table .rate-cell.zero { color:rgba(255,255,255,0.3); }
.failure-table .cat { font-size:10.5px; padding:1px 5px; border-radius:3px; margin-right:3px; display:inline-block; }
.failure-table .cat-bot_text_hang { background:rgba(167,139,250,0.12); color:#a78bfa; }
.failure-table .cat-cover_describer { background:rgba(251,146,60,0.12); color:#fb923c; }
.failure-table .cat-qc_reject { background:rgba(56,189,248,0.12); color:#38bdf8; }
.failure-table .cat-no_account { background:rgba(148,163,184,0.12); color:#94a3b8; }
.failure-table .cat-operator_reject { background:rgba(255,255,255,0.04); color:rgba(255,255,255,0.45); font-style:italic; }
.failure-table .cat-other { background:rgba(255,255,255,0.05); color:rgba(255,255,255,0.55); }

.plan-actions { display:flex; gap:10px; margin-top:16px; padding:16px; background:#1a1a18; border:1px solid rgba(255,255,255,0.05); border-radius:10px; }
.plan-btn { padding:10px 18px; font-size:13px; font-weight:500; border-radius:6px; cursor:pointer; border:1px solid transparent; font-family:inherit; transition:all 0.15s; }
.plan-btn.primary { background:#38bdf8; color:#0a0a09; font-weight:600; border-color:#38bdf8; }
.plan-btn.primary:hover { background:#5ccef9; }
.plan-btn.approve { background:rgba(74,222,128,0.15); color:#4ade80; border-color:rgba(74,222,128,0.35); }
.plan-btn.approve:hover { background:rgba(74,222,128,0.25); }
.plan-btn.reject { background:rgba(248,113,113,0.12); color:#f87171; border-color:rgba(248,113,113,0.3); }
.plan-btn.reject:hover { background:rgba(248,113,113,0.22); }
.plan-hint { font-size:12px; color:rgba(255,255,255,0.55); line-height:18px; padding:4px 0; }

/* PR #168: 棗详情 tab — 已上线 bot URL 表 + 重置审批 */
.detail-empty { padding:48px 20px; text-align:center; color:rgba(255,255,255,0.5); }
.detail-empty .cs-title { font-size:18px; font-weight:600; color:rgba(255,255,255,0.85); margin-bottom:8px; }
.detail-empty .cs-note { font-size:13px; color:rgba(255,255,255,0.4); }
.detail-content { padding:18px; }
.detail-head { display:flex; align-items:flex-start; justify-content:space-between; gap:20px; padding:14px 16px; margin-bottom:18px; background:#1a1a18; border:1px solid rgba(255,255,255,0.06); border-radius:8px; }
.detail-head-info { flex:1; min-width:0; }
.detail-head-title { font-size:16px; font-weight:600; color:rgba(255,255,255,0.92); margin-bottom:6px; }
.detail-head-meta { font-size:12px; color:rgba(255,255,255,0.55); font-family:ui-monospace,monospace; }
.detail-head-actions { flex-shrink:0; }
.action-btn { padding:8px 14px; font-size:12px; font-weight:500; border-radius:5px; cursor:pointer; border:1px solid transparent; font-family:inherit; transition:all 0.15s; }
.action-btn.warn { background:rgba(248,113,113,0.10); color:#fca5a5; border-color:rgba(248,113,113,0.32); }
.action-btn.warn:hover { background:rgba(248,113,113,0.18); }

.pub-list { display:flex; flex-direction:column; gap:8px; }
.pub-item { padding:10px 12px; background:#0f0f0e; border:1px solid rgba(255,255,255,0.06); border-radius:6px; }
.pub-item-row { display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin-bottom:6px; }
.pub-task-id { font-size:11px; font-weight:600; color:rgba(255,255,255,0.78); font-family:ui-monospace,monospace; }
.pub-account { font-size:11px; color:rgba(255,255,255,0.55); padding:1px 7px; background:rgba(255,255,255,0.05); border-radius:4px; }
.pub-time { font-size:10px; color:rgba(255,255,255,0.35); margin-left:auto; }
.pub-deleted { font-size:10px; color:#fbbf24; padding:1px 6px; background:rgba(251,191,36,0.10); border:1px solid rgba(251,191,36,0.25); border-radius:4px; }
.pub-item-link { padding-left:8px; }
.pub-link { color:#38bdf8; font-size:12px; font-family:ui-monospace,monospace; word-break:break-all; }
.pub-link:hover { text-decoration:underline; color:#5ccef9; }

/* 梗方案卡 — approved 阶段生产 bot 简略列表 (5/12 陈啸林) */
.prod-list { display:flex; flex-direction:column; gap:6px; }
.prod-item { padding:8px 10px; background:#0f0f0e; border:1px solid rgba(255,255,255,0.06); border-radius:6px; }
.prod-item-row { display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin-bottom:4px; font-size:11px; }
.prod-task-id { font-weight:600; color:rgba(255,255,255,0.78); font-family:ui-monospace,monospace; }
.prod-batch { color:rgba(255,255,255,0.4); font-family:ui-monospace,monospace; padding:1px 5px; background:rgba(255,255,255,0.04); border-radius:3px; }
.prod-combo { color:rgba(255,255,255,0.6); font-family:ui-monospace,monospace; padding:1px 5px; background:rgba(56,189,248,0.06); border:1px solid rgba(56,189,248,0.15); border-radius:3px; }
.prod-account { color:rgba(255,255,255,0.55); padding:1px 6px; background:rgba(255,255,255,0.05); border-radius:3px; }
.prod-time { color:rgba(255,255,255,0.35); margin-left:auto; font-size:10px; }
.prod-item-link { padding-left:4px; }
.prod-link { color:#38bdf8; font-size:11px; font-family:ui-monospace,monospace; word-break:break-all; }
.prod-link:hover { text-decoration:underline; color:#5ccef9; }
.prod-no-link { color:rgba(255,255,255,0.35); font-size:10px; }

/* Phase Judge — valence Lift / dead status table (梗详情 tab) */
.pj-meta { font-size:11px; color:rgba(255,255,255,0.55); margin-bottom:6px; font-family:ui-monospace,monospace; }
.pj-empty { font-size:12px; color:rgba(255,255,255,0.40); padding:10px 0; }
.pj-table { width:100%; border-collapse:collapse; font-size:11px; font-family:ui-monospace,monospace; }
.pj-table th { text-align:left; padding:6px 8px; color:rgba(255,255,255,0.55); font-weight:500; border-bottom:1px solid rgba(255,255,255,0.10); }
.pj-table td { padding:6px 8px; color:rgba(255,255,255,0.78); border-bottom:1px solid rgba(255,255,255,0.05); }
.pj-table tr.dead td { background:rgba(248,113,113,0.06); }
.pj-table tr.dead .pj-letter { color:#fca5a5; }
.pj-table tr.immature td { color:rgba(255,255,255,0.42); }
.pj-letter { font-weight:600; color:rgba(255,255,255,0.92); }
.pj-label { color:rgba(255,255,255,0.62); }
.pj-num { font-variant-numeric:tabular-nums; }
.pj-lift-good { color:#86efac; font-weight:600; }
.pj-lift-bad { color:#fca5a5; font-weight:600; }
.pj-status { font-size:10px; padding:1px 6px; border-radius:4px; }
.pj-status.dead { background:rgba(248,113,113,0.15); color:#fca5a5; border:1px solid rgba(248,113,113,0.30); }
.pj-status.alive { background:rgba(134,239,172,0.10); color:#86efac; border:1px solid rgba(134,239,172,0.25); }
.pj-status.immature { background:rgba(255,255,255,0.05); color:rgba(255,255,255,0.45); border:1px solid rgba(255,255,255,0.10); }

/* Phase 3 cycle 历史表 (梗详情 tab) */
.cyc-meta { font-size:11px; color:rgba(255,255,255,0.55); margin-bottom:6px; font-family:ui-monospace,monospace; }
.cyc-empty { font-size:12px; color:rgba(255,255,255,0.40); padding:10px 0; }
.cyc-table { width:100%; border-collapse:collapse; font-size:11px; font-family:ui-monospace,monospace; }
.cyc-table th { text-align:left; padding:6px 8px; color:rgba(255,255,255,0.55); font-weight:500; border-bottom:1px solid rgba(255,255,255,0.10); }
.cyc-table td { padding:6px 8px; color:rgba(255,255,255,0.78); border-bottom:1px solid rgba(255,255,255,0.05); }
.cyc-table tr.skipped td { color:rgba(255,255,255,0.32); }
.cyc-table tr.converged td { background:rgba(134,239,172,0.06); }
.cyc-table tr.noisy td { background:rgba(251,191,36,0.06); }
.cyc-combo { font-weight:600; color:rgba(255,255,255,0.92); }
.cyc-cell { font-variant-numeric:tabular-nums; }
.cyc-cell-locked { color:rgba(255,255,255,0.92); }
.cyc-cell-empty { color:rgba(255,255,255,0.30); }
.cyc-status { font-size:10px; padding:1px 6px; border-radius:4px; }
.cyc-status.active { background:rgba(56,189,248,0.10); color:#38bdf8; border:1px solid rgba(56,189,248,0.30); }
.cyc-status.converged { background:rgba(134,239,172,0.15); color:#86efac; border:1px solid rgba(134,239,172,0.30); }
.cyc-status.noisy { background:rgba(251,191,36,0.15); color:#fbbf24; border:1px solid rgba(251,191,36,0.30); }
.cyc-status.skipped { background:rgba(255,255,255,0.05); color:rgba(255,255,255,0.40); border:1px solid rgba(255,255,255,0.10); }

/* Phase rules modal — 点 Kanban 列标题弹出该阶段入池逻辑 */
.kanban-col-title.clickable { cursor:pointer; }
.kanban-col-title.clickable:hover { color:#fff; text-decoration:underline; text-decoration-style:dotted; text-underline-offset:4px; }
.kanban-col-title .info-mark { display:inline-block; margin-left:6px; font-size:10px; color:rgba(255,255,255,0.40); vertical-align:middle; border:1px solid rgba(255,255,255,0.25); border-radius:50%; width:14px; height:14px; line-height:12px; text-align:center; font-family:Georgia,serif; }
.phase-rules-overlay { position:fixed; inset:0; background:rgba(0,0,0,0.70); z-index:1000; display:flex; align-items:center; justify-content:center; }
.phase-rules-modal { background:#1a1a18; border:1px solid rgba(255,255,255,0.12); border-radius:8px; padding:24px 28px; max-width:560px; width:90%; max-height:80vh; overflow-y:auto; box-shadow:0 18px 48px rgba(0,0,0,0.45); }
.phase-rules-title { font-size:16px; font-weight:600; color:#fff; margin-bottom:8px; }
.phase-rules-summary { font-size:13px; color:rgba(255,255,255,0.62); margin-bottom:16px; line-height:1.6; }
.phase-rules-section-title { font-size:12px; font-weight:600; color:#38bdf8; margin:14px 0 6px; }
.phase-rules-body { font-size:13px; color:rgba(255,255,255,0.78); line-height:1.7; }
.phase-rules-body ul { margin:0 0 0 18px; padding:0; }
.phase-rules-body li { margin-bottom:5px; }
.phase-rules-body code { background:rgba(255,255,255,0.06); padding:1px 5px; border-radius:3px; font-family:ui-monospace,monospace; font-size:11px; }
.phase-rules-close { display:block; margin:20px auto 0; padding:7px 22px; background:rgba(56,189,248,0.15); border:1px solid rgba(56,189,248,0.35); color:#38bdf8; border-radius:5px; cursor:pointer; font-size:13px; font-family:inherit; }
.phase-rules-close:hover { background:rgba(56,189,248,0.25); }

/* Phase 1 attractiveness extraction tool — chen 5/7 ruonan抽核心梗 reuse */
.attract-section { padding:24px; background:#1a1a18; border:1px solid rgba(255,255,255,0.06); border-radius:8px; max-width:980px; }
.attract-section-title { font-size:15px; font-weight:600; color:rgba(255,255,255,0.92); margin-bottom:8px; }
.attract-section-note { font-size:12px; color:rgba(255,255,255,0.55); line-height:1.6; margin-bottom:16px; }
.attract-input-row { display:flex; gap:8px; margin-bottom:16px; }
.attract-input { flex:1; padding:9px 12px; background:#0f0f0e; border:1px solid rgba(255,255,255,0.10); border-radius:5px; color:rgba(255,255,255,0.92); font-size:13px; font-family:ui-monospace,monospace; outline:none; }
.attract-input:focus { border-color:rgba(56,189,248,0.45); }
.attract-btn { padding:9px 18px; background:rgba(56,189,248,0.12); color:#38bdf8; border:1px solid rgba(56,189,248,0.32); border-radius:5px; font-size:13px; font-weight:500; cursor:pointer; font-family:inherit; transition:all 0.15s; }
.attract-btn:hover:not(:disabled) { background:rgba(56,189,248,0.22); }
.attract-btn:disabled { opacity:0.4; cursor:not-allowed; }
.attract-status { font-size:12px; color:rgba(255,255,255,0.55); font-family:ui-monospace,monospace; min-height:18px; margin-bottom:12px; }
.attract-status.error { color:#fca5a5; }
.attract-status.success { color:#86efac; }
.attract-result { background:#0f0f0e; border:1px solid rgba(255,255,255,0.08); border-radius:6px; padding:18px; }
.attract-result-meta { font-size:11px; color:rgba(255,255,255,0.42); font-family:ui-monospace,monospace; margin-bottom:14px; padding-bottom:10px; border-bottom:1px solid rgba(255,255,255,0.05); }
.attract-result-meta-row { margin-bottom:3px; }
.attract-result-section { margin-bottom:18px; }
.attract-result-section:last-child { margin-bottom:0; }
.attract-result-section-title { font-size:13px; font-weight:600; color:#38bdf8; margin-bottom:8px; }
.attract-skeleton-block { padding:10px 12px; background:rgba(56,189,248,0.04); border:1px solid rgba(56,189,248,0.14); border-radius:5px; margin-bottom:8px; }
.attract-skeleton-label { font-size:11px; color:rgba(255,255,255,0.50); margin-bottom:4px; text-transform:uppercase; letter-spacing:0.04em; }
.attract-skeleton-text { font-size:13px; color:rgba(255,255,255,0.88); line-height:1.6; white-space:pre-wrap; }
.attract-var-card { padding:12px 14px; background:rgba(255,255,255,0.02); border:1px solid rgba(255,255,255,0.07); border-radius:6px; margin-bottom:10px; }
.attract-var-name { font-size:13px; font-weight:600; color:rgba(255,255,255,0.90); margin-bottom:4px; }
.attract-var-reason { font-size:11px; color:rgba(255,255,255,0.50); margin-bottom:6px; line-height:1.5; }
.attract-var-current { font-size:12px; color:rgba(255,255,255,0.78); margin-bottom:8px; padding:5px 8px; background:rgba(255,255,255,0.03); border-radius:4px; }
.attract-var-current::before { content:"当前 → "; color:rgba(255,255,255,0.40); font-size:10px; }
.attract-var-options { display:flex; flex-wrap:wrap; gap:6px; }
.attract-var-option { font-size:11px; padding:3px 8px; background:rgba(56,189,248,0.08); color:#7dd3fc; border:1px solid rgba(56,189,248,0.20); border-radius:3px; }
.attract-raw-fallback { font-size:11px; color:rgba(255,255,255,0.55); font-family:ui-monospace,monospace; white-space:pre-wrap; word-break:break-word; padding:10px; background:rgba(248,113,113,0.04); border:1px solid rgba(248,113,113,0.14); border-radius:5px; max-height:400px; overflow:auto; }

/* Phase 2 attribution UI — chen 5/8 streaming 归属 */
.attribute-section { margin-top:18px; padding:14px 16px; background:rgba(56,189,248,0.03); border:1px solid rgba(56,189,248,0.18); border-radius:6px; }
.attribute-header { display:flex; justify-content:space-between; align-items:center; padding-bottom:10px; margin-bottom:12px; border-bottom:1px solid rgba(255,255,255,0.06); flex-wrap:wrap; gap:8px; }
.attribute-header-label { font-size:13px; font-weight:600; }
.attribute-header.add-anchor .attribute-header-label { color:#86efac; }
.attribute-header.create-new .attribute-header-label { color:#fbbf24; }
.attribute-header.manual .attribute-header-label { color:#7dd3fc; }
.attribute-header-thresholds { font-size:10px; color:rgba(255,255,255,0.40); font-family:ui-monospace,monospace; }
.attribute-rows { display:flex; flex-direction:column; gap:8px; }
.attribute-empty { font-size:12px; color:rgba(255,255,255,0.55); padding:8px; text-align:center; }
.attribute-row { display:flex; align-items:flex-start; gap:12px; padding:10px 12px; background:rgba(255,255,255,0.02); border:1px solid rgba(255,255,255,0.06); border-radius:5px; }
.attribute-row-top { background:rgba(56,189,248,0.04); border-color:rgba(56,189,248,0.20); }
.attribute-row-rank { font-size:11px; color:rgba(255,255,255,0.40); font-family:ui-monospace,monospace; min-width:24px; padding-top:2px; }
.attribute-row-main { flex:1; min-width:0; }
.attribute-row-head { display:flex; align-items:center; gap:8px; margin-bottom:4px; flex-wrap:wrap; }
.attribute-row-code { font-size:12px; font-weight:600; color:#7dd3fc; font-family:ui-monospace,monospace; }
.attribute-row-name { font-size:13px; color:rgba(255,255,255,0.88); }
.attribute-row-score { font-size:11px; font-weight:600; padding:2px 7px; border-radius:3px; font-family:ui-monospace,monospace; }
.attribute-score-high { background:rgba(134,239,172,0.10); color:#86efac; border:1px solid rgba(134,239,172,0.25); }
.attribute-score-mid { background:rgba(125,211,252,0.10); color:#7dd3fc; border:1px solid rgba(125,211,252,0.25); }
.attribute-score-low { background:rgba(251,191,36,0.10); color:#fbbf24; border:1px solid rgba(251,191,36,0.25); }
.attribute-row-reason { font-size:11px; color:rgba(255,255,255,0.55); line-height:1.5; }
.attribute-row-actions { flex-shrink:0; }
.attribute-promote-btn { padding:6px 12px; background:rgba(56,189,248,0.10); color:#38bdf8; border:1px solid rgba(56,189,248,0.30); border-radius:4px; font-size:11px; font-weight:500; cursor:pointer; font-family:inherit; transition:all 0.15s; }
.attribute-promote-btn:hover:not(:disabled) { background:rgba(56,189,248,0.22); }
.attribute-promote-btn:disabled { opacity:0.35; cursor:not-allowed; }
.attribute-promote-btn-new { background:rgba(251,191,36,0.10); color:#fbbf24; border-color:rgba(251,191,36,0.30); }
.attribute-promote-btn-new:hover:not(:disabled) { background:rgba(251,191,36,0.22); }
.attribute-create-new-section { margin-top:14px; padding-top:12px; border-top:1px dashed rgba(255,255,255,0.08); }
.attribute-create-new-label { font-size:11px; color:rgba(255,255,255,0.55); margin-bottom:8px; }
.attribute-create-new-row { display:flex; gap:8px; }
.attribute-create-new-input { flex:1; padding:7px 10px; background:#0f0f0e; border:1px solid rgba(255,255,255,0.10); border-radius:4px; color:rgba(255,255,255,0.92); font-size:12px; font-family:inherit; outline:none; }
.attribute-create-new-input:focus { border-color:rgba(251,191,36,0.45); }
.attribute-promote-status { font-size:11px; color:rgba(255,255,255,0.55); font-family:ui-monospace,monospace; min-height:14px; margin-top:10px; padding-top:8px; border-top:1px solid rgba(255,255,255,0.04); }
.attribute-promote-status.error { color:#fca5a5; }
.attribute-promote-status.success { color:#86efac; }

/* 梗级默认配置 (chen 5/8 streaming 归属 PR 3d) */
.attribute-defaults-block { margin-bottom:12px; padding:12px; background:rgba(251,191,36,0.04); border:1px solid rgba(251,191,36,0.18); border-radius:5px; }
.attribute-defaults-label { font-size:12px; color:rgba(255,255,255,0.78); margin-bottom:10px; display:flex; justify-content:space-between; align-items:center; gap:8px; flex-wrap:wrap; }
.attribute-defaults-warn { font-size:11px; color:#fca5a5; }
.attribute-defaults-grid { display:grid; grid-template-columns:1fr 1fr; gap:8px 12px; }
.attribute-default-row { display:flex; align-items:center; gap:8px; }
.attribute-default-label { font-size:11px; color:rgba(255,255,255,0.55); min-width:80px; }
.attribute-default-select { flex:1; padding:5px 8px; background:#0f0f0e; border:1px solid rgba(255,255,255,0.10); border-radius:4px; color:rgba(255,255,255,0.92); font-size:12px; font-family:inherit; outline:none; }
.attribute-default-select:focus { border-color:rgba(251,191,36,0.45); }
.attribute-defaults-reason { font-size:11px; color:rgba(255,255,255,0.55); margin-top:8px; padding-top:8px; border-top:1px dashed rgba(255,255,255,0.05); line-height:1.5; }

/* 蓝图管理 (5/9 chen) ─ V1×V8 矩阵 + 蓝图详情 */
.blueprint-grid { width:100%; overflow-x:auto; }
.bg-table { display:grid; gap:6px; min-width:800px; }
.bg-corner { background:transparent; }
.bg-h-head { padding:8px 6px; text-align:center; }
.bg-h-head-code { font-size:11px; color:rgba(255,255,255,0.50); font-family:ui-monospace,monospace; }
.bg-h-head-label { font-size:13px; color:rgba(255,255,255,0.85); font-weight:500; margin-top:2px; }
.bg-v-head { padding:8px 6px; text-align:right; align-self:center; }
.bg-v-head-code { font-size:11px; color:rgba(255,255,255,0.50); font-family:ui-monospace,monospace; }
.bg-v-head-label { font-size:13px; color:rgba(255,255,255,0.85); font-weight:500; margin-top:2px; }
.bg-cell { padding:14px 8px; border:1px solid; border-radius:6px; cursor:pointer; transition:all 0.12s; text-align:center; min-height:64px; display:flex; flex-direction:column; justify-content:center; gap:4px; }
.bg-cell:hover { transform:translateY(-1px); border-color:rgba(56,189,248,0.85) !important; }
.bg-cell-count { font-size:14px; color:rgba(255,255,255,0.95); font-weight:600; }
.bg-cell-bots { font-size:11px; color:rgba(255,255,255,0.55); font-family:ui-monospace,monospace; }
.bg-cell-empty { font-size:11px; color:rgba(255,255,255,0.25); }

.blueprint-aggregates { display:grid; grid-template-columns:repeat(4, 1fr); gap:10px; margin-bottom:8px; }
.bg-agg-card { padding:14px; background:rgba(255,255,255,0.03); border:1px solid rgba(255,255,255,0.06); border-radius:6px; }
.bg-agg-label { font-size:11px; color:rgba(255,255,255,0.50); margin-bottom:6px; }
.bg-agg-value { font-size:18px; color:rgba(255,255,255,0.95); font-weight:600; font-family:ui-monospace,monospace; }

.blueprint-gene-list { display:flex; flex-direction:column; gap:6px; }
.bg-gene-row { padding:12px 14px; background:rgba(255,255,255,0.03); border:1px solid rgba(255,255,255,0.06); border-radius:5px; cursor:pointer; transition:background 0.12s; }
.bg-gene-row:hover { background:rgba(56,189,248,0.06); border-color:rgba(56,189,248,0.25); }
.bg-gene-row-head { display:flex; gap:10px; align-items:center; flex-wrap:wrap; margin-bottom:4px; }
.bg-gene-code { font-size:13px; color:rgba(255,255,255,0.95); font-family:ui-monospace,monospace; font-weight:600; }
.bg-gene-name { font-size:13px; color:rgba(255,255,255,0.85); }
.bg-gene-status { font-size:10px; color:rgba(255,255,255,0.50); padding:1px 7px; background:rgba(255,255,255,0.04); border-radius:8px; font-family:ui-monospace,monospace; }
.bg-gene-row-stats { display:flex; gap:14px; font-size:11px; color:rgba(255,255,255,0.55); font-family:ui-monospace,monospace; flex-wrap:wrap; }
