/* 创作台（Remix workbench）。任务板本身是 partials/subject_task_board.html，
   其样式来自全局加载的 effect_pipeline.css —— 这里只管创作面板与页面骨架。 */
.rx-page { color: var(--text); }
.rx-title-row { display:flex; justify-content:space-between; gap:20px; margin:4px 0 18px; }
.rx-title-row h1 { margin:0 0 6px; font-size:24px; line-height:1.25; }
.rx-title-row p,.rx-card-head p { margin:0; color:var(--text-muted); font-size:13px; line-height:1.55; }
.rx-toolbar { display:flex; align-items:center; gap:12px; min-height:42px; margin-bottom:16px; }
.rx-audience { margin-left:auto; display:flex; align-items:center; gap:8px; flex:0 0 auto; }
.rx-audience>span { color:var(--text-muted); font-size:11px; }
.rx-audience-nav { padding:3px; }
.rx-audience-nav .sub-tab { min-height:30px; padding:5px 10px; font-size:11px; }
.rx-filters { display:flex; align-items:center; gap:4px; flex-wrap:wrap; min-width:0; }
.rx-filter { border:0; background:transparent; color:var(--text-muted); border-radius:7px; padding:7px 10px; font:inherit; font-size:12px; cursor:pointer; }
.rx-filter:hover { background:var(--surface-3); color:var(--text); }
.rx-filter.active { background:var(--surface); color:var(--text); box-shadow:0 0 0 1px var(--border); font-weight:600; }
.rx-layout { display:grid; grid-template-columns:380px minmax(0,1fr); gap:18px; align-items:start; }
.rx-card { overflow:hidden; border-radius:12px; background:var(--surface); }
.rx-card-head { min-height:68px; padding:15px 18px; display:flex; align-items:center; justify-content:space-between; gap:14px; border-bottom:1px solid var(--border); }
.rx-card-head h2 { margin:0 0 4px; font-size:16px; }
.rx-origin { width:calc(100% - 32px); margin:14px 16px 0; }
.rx-origin .sub-tab { flex:1; justify-content:center; }
.rx-form-body,.rx-results-body { padding:16px; }
.rx-field { display:block; margin-bottom:14px; }
.rx-field>span { display:flex; justify-content:space-between; align-items:center; gap:8px; margin-bottom:7px; font-size:12px; font-weight:600; color:var(--text-muted); }
.rx-field-hint { font-weight:400; font-size:11px; color:var(--text-muted); }
.rx-text-btn { border:0; padding:0; color:var(--primary); background:transparent; font:inherit; cursor:pointer; }
.rx-field textarea { width:100%; min-height:72px; box-sizing:border-box; resize:vertical; border:1px solid var(--border); border-radius:8px; padding:10px 11px; background:var(--surface); color:var(--text); font:inherit; font-size:13px; line-height:1.55; outline:none; }
.rx-field textarea:focus { border-color:var(--primary); box-shadow:0 0 0 3px var(--accent-soft); }
.rx-model-note { margin:0 0 14px; padding:9px 11px; border-left:3px solid var(--primary); border-radius:4px; background:var(--accent-soft); color:var(--text); font-size:11px; line-height:1.6; }
.rx-upload { width:100%; min-height:112px; display:grid; place-items:center; gap:4px; border:1px dashed color-mix(in srgb,var(--text-muted) 48%,var(--border)); border-radius:9px; background:var(--surface-2); color:var(--text); cursor:pointer; }
.rx-upload:hover { border-color:var(--primary); background:var(--accent-soft); }
.rx-upload.is-dragging { border-color:var(--primary); background:var(--accent-soft); box-shadow:0 0 0 3px color-mix(in srgb,var(--primary) 16%,transparent); }
.rx-upload b { font-size:13px; }.rx-upload small { color:var(--text-muted); font-size:11px; }
.rx-file-input { position:absolute; width:1px; height:1px; opacity:.01; overflow:hidden; }
.rx-link-row { display:flex; gap:7px; margin-top:8px; }
.rx-link-row input { min-width:0; flex:1; height:34px; padding:0 10px; border:1px solid var(--border); border-radius:8px; background:var(--surface); color:var(--text); font:inherit; font-size:12px; outline:none; }
.rx-link-row input:focus { border-color:var(--primary); box-shadow:0 0 0 3px var(--accent-soft); }
.rx-link-hint { display:block; margin-top:6px; color:var(--text-muted); font-size:10.5px; line-height:1.5; }
.rx-library-entry { display:flex; align-items:center; justify-content:space-between; gap:10px; margin-top:8px; padding:8px 9px; border:1px solid var(--border); border-radius:8px; background:var(--surface-2); color:var(--text-muted); font-size:11px; }
.rx-library-entry .btn { flex:0 0 auto; }
.rx-fetching { display:flex; align-items:center; gap:10px; min-height:64px; padding:11px; border:1px dashed var(--border); border-radius:9px; background:var(--surface-2); }
.rx-fetching strong { display:block; font-size:12px; }
.rx-fetching small { color:var(--text-muted); font-size:10.5px; }
.rx-source-card { display:grid; grid-template-columns:88px minmax(0,1fr); gap:12px; padding:10px; border:1px solid var(--border); border-radius:9px; background:var(--surface-2); }
.rx-source-meta { min-width:0; display:flex; flex-direction:column; justify-content:center; gap:5px; }
.rx-source-meta b,.rx-source-meta small { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.rx-source-meta b { font-size:13px; }.rx-source-meta small { color:var(--text-muted); font-size:11px; }
.rx-source-meta .rx-text-btn { align-self:flex-start; font-size:12px; }
.rx-source-badge { align-self:flex-start; display:inline-flex; padding:2px 7px; border-radius:999px; background:var(--success-bg); color:var(--success-text); font-size:10px; font-weight:600; }
.rx-source-error { margin:0 0 10px; padding:9px 10px; border:1px solid var(--error-border); border-radius:8px; background:var(--error-bg); color:var(--error-text); font-size:12px; line-height:1.5; }
/* ★双类选择器不是装饰: effect_pipeline.css 在 index.html 里比本表后加载,
   它的 .ep-dialog{width:min(620px,…)} 与单类 .rx-inspiration-dialog 同特异性,
   按加载顺序会把弹窗压回 620px —— 三列卡片被挤扁, 按钮竖排溢出(实测截图)。
   用 .ep-dialog.rx-inspiration-dialog (0-2-0) 赢下宽度, 不依赖加载顺序。 */
.ep-dialog.rx-inspiration-dialog { width:min(1120px,calc(100vw - 40px)); max-height:min(820px,calc(100vh - 40px)); overflow:hidden; }
.rx-picker-lead { margin:0; padding:12px 20px; border-bottom:1px solid var(--border); background:var(--surface-2); color:var(--text-muted); font-size:12px; line-height:1.6; }
.rx-picker-body { min-height:340px; max-height:calc(100vh - 210px); padding:16px 20px 22px; overflow:auto; }
.rx-picker-toolbar { position:sticky; top:-16px; z-index:2; display:flex; gap:8px; padding:0 0 12px; background:var(--surface); }
.rx-picker-toolbar label { min-width:0; flex:1; }
.rx-picker-toolbar input { width:100%; height:36px; box-sizing:border-box; padding:0 11px; border:1px solid var(--border); border-radius:8px; background:var(--surface); color:var(--text); font:inherit; font-size:12px; outline:none; }
.rx-picker-toolbar input:focus { border-color:var(--primary); box-shadow:0 0 0 3px var(--accent-soft); }
.rx-picker-summary { display:flex; justify-content:space-between; gap:12px; margin-bottom:12px; color:var(--text-muted); font-size:11px; }
.rx-picker-summary i { display:inline-block; width:7px; height:7px; margin-right:4px; border-radius:50%; background:var(--text-muted); }
.rx-picker-summary i.is-ready { background:var(--success); }.rx-picker-summary i.is-fetch { background:var(--primary); }
/* auto-fill 而不是写死 3 列: 无论弹窗实际多宽(被压窄也一样), 每卡至少 300px,
   放不下就减列 —— 卡片永远不会被挤到按钮竖排。 */
.rx-picker-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(300px,1fr)); gap:12px; }
.rx-picker-card { min-width:0; display:grid; grid-template-columns:110px minmax(0,1fr); gap:12px; padding:10px; border:1px solid var(--border); border-radius:10px; background:var(--surface-2); }
.rx-picker-card.is-ready { border-color:color-mix(in srgb,var(--success) 42%,var(--border)); }
.rx-picker-cover { position:relative; width:110px; aspect-ratio:9/16; overflow:hidden; display:grid; place-items:center; border-radius:8px; background:#181c26; color:#b8becb; font-size:11px; }
.rx-picker-cover img,.rx-picker-cover video { width:100%; height:100%; object-fit:contain; }
.rx-picker-cover b { position:absolute; left:6px; bottom:6px; padding:2px 5px; border-radius:4px; background:rgba(0,0,0,.68); color:#fff; font-size:9px; }
.rx-picker-copy { min-width:0; display:flex; flex-direction:column; gap:7px; }
.rx-picker-copy>small { overflow:hidden; color:var(--text-muted); font-size:10px; text-overflow:ellipsis; white-space:nowrap; }
.rx-picker-copy>strong { display:-webkit-box; overflow:hidden; color:var(--text); font-size:12px; line-height:1.45; -webkit-box-orient:vertical; -webkit-line-clamp:3; }
.rx-picker-copy .btn { align-self:stretch; margin-top:auto; justify-content:center; padding:8px 10px; font-size:12px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.rx-picker-state { color:var(--text-muted); font-size:10.5px; line-height:1.4; }.rx-picker-state.is-ready { color:var(--success); }.rx-picker-state.is-error { color:var(--error); }
.rx-picker-loading,.rx-picker-empty { min-height:260px; display:grid; place-content:center; gap:5px; color:var(--text-muted); text-align:center; font-size:12px; }
.rx-picker-empty b { color:var(--text); font-size:14px; }
.rx-mini-video { display:block; width:88px; aspect-ratio:9/16; border-radius:8px; background:#181c26; object-fit:cover; }
.rx-spinner { width:14px; height:14px; border:2px solid var(--border); border-top-color:var(--primary); border-radius:50%; animation:rx-spin .8s linear infinite; }
@keyframes rx-spin { to{transform:rotate(360deg)} }
/* 参考图槽复用标准玩法弹窗的共享组件(.ep-slot, 样式在 effect_pipeline.css)。
   创作台左栏比弹窗窄且是单列: 画布压成 16/9, 免得一个空槽占掉半屏。 */
.rx-intent-result .ep-slot-canvas { aspect-ratio:16/9; }
.rx-submit,.rx-interpret { width:100%; min-height:38px; }
.rx-submit-help { display:block; min-height:17px; margin-top:5px; color:var(--text-muted); text-align:center; }
.rx-intent-result { margin-top:14px; padding:12px; border:1px solid var(--border); border-radius:9px; background:var(--surface-2); }
.rx-intent-summary { margin-bottom:12px; padding-bottom:11px; border-bottom:1px solid var(--border); }
.rx-intent-summary-head { display:flex; align-items:center; justify-content:space-between; gap:8px; margin-bottom:5px; }
.rx-intent-summary-head b { font-size:13px; }
.rx-intent-chip { display:inline-flex; padding:3px 8px; border-radius:999px; background:var(--accent-soft); color:var(--primary); font-size:10px; font-weight:650; }
/* 人物路径的真实语义: 默认保持承诺 + 多人时的紧凑选择控件(全部用主题变量)。 */
.rx-preserve-note { margin:6px 0 0; font-size:12px; color:var(--text-muted); }
.rx-person-choice { display:flex; flex-direction:column; gap:6px; margin-top:10px; padding:9px 10px; border:1px solid var(--border); border-radius:8px; background:var(--surface); }
.rx-person-choice b { font-size:12px; }
.rx-person-choice label { display:flex; align-items:center; gap:6px; min-width:0; font-size:12px; color:var(--text); cursor:pointer; }
.rx-person-hint { display:block; margin-top:8px; font-size:11px; color:var(--text-muted); }
.rx-person-hint .rx-text-btn { font-size:11px; }
.rx-intent-summary p { margin:0; color:var(--text-muted); font-size:11px; line-height:1.55; }
.rx-intent-route { margin-top:7px; color:var(--text); font-size:11px; }
.rx-intent-warning { margin:0; padding:9px 10px; border:1px solid var(--warning-border); border-radius:8px; background:var(--warning-bg); color:var(--warning-text); font-size:11px; line-height:1.55; }
.rx-intent-actions { display:flex; gap:8px; margin-top:10px; }
.rx-intent-actions>a,.rx-intent-actions>button { flex:1; text-align:center; text-decoration:none; }
.rx-plays-note { margin:0 0 12px; color:var(--text-muted); font-size:11px; line-height:1.55; }
.rx-play-list { display:grid; gap:6px; }
.rx-play-card { width:100%; display:flex; align-items:flex-start; justify-content:space-between; gap:10px; padding:10px 11px; border:1px solid var(--border); border-radius:8px; background:var(--surface); color:var(--text); font:inherit; text-align:left; cursor:pointer; text-decoration:none; }
.rx-play-card:hover { border-color:var(--primary); background:var(--accent-soft); }
.rx-play-card>span { min-width:0; }
.rx-play-card b { display:block; margin-bottom:3px; font-size:12px; }
.rx-play-card small { display:block; color:var(--text-muted); font-size:10px; line-height:1.45; }
.rx-play-start { margin-top:3px; color:var(--primary); }
.rx-play-model { margin-top:3px; color:var(--text); }
.rx-play-card i { flex:0 0 auto; color:var(--text-muted); font-style:normal; }
/* 标准玩法任务处理弹窗：内容是旧流程真实工作流片段(item/guided)，需要宽幅。
   ★双类锁宽同 rx-inspiration-dialog 的教训：effect_pipeline.css 后加载的
   .ep-dialog{width:min(620px,…)} 与单类同特异性，会按加载顺序把弹窗压回
   620px —— 片段里的阶段布局会被挤坏。 */
.ep-dialog.rx-workflow-dialog { width:min(1180px,calc(100vw - 40px)); max-height:calc(100vh - 40px); overflow:hidden; display:flex; flex-direction:column; }
.ep-dialog.rx-workflow-dialog:not([open]) { display:none; }
.rx-workflow-head { flex:0 0 auto; padding-bottom:12px; border-bottom:1px solid var(--border); }
.rx-workflow-body { min-height:280px; flex:1 1 auto; overflow:auto; padding:16px 20px 22px; }
.rx-workflow-dialog:has(.ep-batch-detail) { height:min(850px,calc(100dvh - 40px)); }
.rx-workflow-body:has(.ep-batch-detail) { min-height:0; overflow:hidden; padding:0; display:flex; flex-direction:column; }
.rx-workflow-body > .ep-batch-detail { flex:1; min-height:0; overflow:hidden; padding:0; gap:0; border:0; border-radius:0; }
.rx-workflow-body .ep-batch-detail-scroll { flex:1; min-height:0; overflow:auto; overscroll-behavior:contain; padding:16px 20px; display:flex; flex-direction:column; gap:14px; }
.rx-workflow-body .ep-batch-detail > .sr-acts { position:static; flex:none; margin:0; padding:12px 20px; justify-content:flex-end; background:var(--surface); border-top:1px solid var(--border); }
.rx-workflow-body:empty::before { content:'正在载入任务详情…'; display:grid; place-content:center; min-height:240px; color:var(--text-muted); font-size:12px; }
.rx-empty { padding:64px 20px; color:var(--text-muted); text-align:center; }
.rx-empty b { display:block; margin-bottom:6px; color:var(--text); font-size:14px; }
.rx-page .sr-row.is-remix .sr-slot.is-reference>.sr-media { box-sizing:border-box; padding:6px; border:1px solid var(--border); border-radius:8px; background:var(--surface-2); }
.rx-page .sr-row.is-remix .sr-slot figcaption { white-space:nowrap; }
.rx-page .sr-remix-scope { margin:0; color:var(--text-muted); font-size:11px; line-height:1.45; }
/* 标准玩法父卡: 真没有素材的阶段(拆解/待确认)用紧凑卡, 不摆 190px 空框。 */
.rx-page .sr-row.rx-compact { align-items:center; }
.rx-page .rx-compact-main { min-width:0; display:flex; flex-direction:column; gap:6px; }
.rx-page .rx-compact-main b { font-size:13px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.rx-page .rx-compact-main small { color:var(--text-muted); font-size:11px; }
/* 失败数 >0 才标红; 0 是正常态, 不能整卡发红。 */
.rx-page .sr-facts dd.rx-fact-bad { color:var(--error); }
/* orphan 子任务标识: 虚线中性 chip, 说明"它是标准玩法的产物、父任务不可见"。 */
.rx-page .ep-chip.rx-orphan { border:1px dashed var(--text-muted); background:transparent; color:var(--text-muted); }
/* 父卡的错误态左描边: item 的真实错误词是 generation_error/analysis_error,
   app.css 只认 .failed —— 视觉对齐, 状态词不改。 */
.rx-page .sr-row.generation_error, .rx-page .sr-row.analysis_error { border-left:3px solid var(--error); }
.rx-page .sr-row.generating, .rx-page .sr-row.awaiting_review { border-left:3px solid var(--primary); }
.rx-toast { position:fixed; z-index:100; left:50%; bottom:24px; transform:translate(-50%,8px); opacity:0; pointer-events:none; max-width:440px; padding:9px 14px; border:1px solid var(--info-border); border-radius:8px; background:var(--info-bg); color:var(--info-text); font-size:12px; transition:.18s; }
.rx-toast.show { opacity:1; transform:translate(-50%,0); }
/* 每卡收起/展开。「收起」按钮 margin-left:auto 顶到该卡操作区最右 ——
   即卡片右下角, 与通过/重试等真实操作同一行; 收起态摘要行的「展开」同理。
   折叠类挂在卡片(article)上, 由 JS 按稳定任务 id 存取并在轮询替换后恢复。 */
.rx-page .sr-card-toggle { display:inline-flex; align-items:center; gap:4px; margin-left:auto; }
.rx-page .sr-card-toggle svg { flex:none; }
.rx-page .rx-task-delete {
  position:relative; display:grid; place-items:center; flex:0 0 30px;
  width:30px; height:30px; padding:0; border:1px solid transparent;
  border-radius:7px; background:transparent; color:var(--text-muted);
  cursor:pointer; transition:background .12s ease,color .12s ease,border-color .12s ease;
}
.rx-page .sr-row[data-sr-batch-child] .rx-task-delete {
  flex-basis:32px; width:32px; height:32px; color:var(--error);
}
.rx-page .rx-task-delete:hover {
  border-color:var(--error-border); background:var(--error-bg); color:var(--error);
}
.rx-page .rx-task-delete:focus-visible {
  outline:2px solid var(--error); outline-offset:1px;
}
.rx-page .rx-task-delete.htmx-request svg { visibility:hidden; }
.rx-page .rx-task-delete.htmx-request::after {
  position:absolute; inset:0; width:13px; height:13px; margin:auto;
}
/* 收起态摘要行(默认隐藏): 标题弹性收缩省略, 其余项不缩; 窄屏允许换行。 */
.rx-page .sr-brief { display:none; min-width:0; flex-wrap:wrap; align-items:center; gap:6px 8px; }
.rx-page .sr-brief>b { flex:1 1 auto; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-size:13px; }
.rx-page .sr-brief>small { flex:none; color:var(--text-muted); font-size:11px; }
.rx-page .sr-brief .sr-owner { flex:none; max-width:12em; }
/* 收起 = 该卡只剩摘要行; 媒体流、详细 facts/错误长文全部隐藏。 */
.rx-page .sr-row.is-collapsed { grid-template-columns:1fr; }
.rx-page .sr-row.is-collapsed :is(.sr-flow,.rx-compact-main,.sr-side) { display:none; }
.rx-page .sr-row.is-collapsed .sr-brief { display:flex; }
/* 团队视图创建人: 状态胶囊下固定一行(图标 + 用户名), 纵向可扫读;
   名字来自真实字段, 过长省略。个人视图不渲染这一行。 */
.rx-page .sr-owner { display:flex; align-items:center; gap:6px; min-width:0; font-size:12px; font-weight:600; color:var(--text); }
.rx-page .sr-owner svg { flex:none; color:var(--text-muted); }
.rx-page .sr-owner-name { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
/* 任务分页：计数在左、翻页在右，复用全局次按钮。只用主题变量，
   轮询更新时高度不变；窄屏自然换行，不挤压卡片列。 */
.rx-task-pager { display:flex; align-items:center; justify-content:space-between; gap:10px; min-width:0; margin-top:12px; padding-top:12px; border-top:1px solid var(--border); }
.rx-task-pager-meta,.rx-task-pager-nav { display:flex; align-items:center; gap:8px; }
.rx-task-pager-meta { min-width:0; color:var(--text-muted); font-size:11px; font-variant-numeric:tabular-nums; }
.rx-task-pager-meta>span { white-space:nowrap; }
.rx-task-pager-meta label { display:flex; align-items:center; gap:4px; white-space:nowrap; }
.rx-task-pager-meta select { height:30px; padding:0 24px 0 8px; border:1px solid var(--border); border-radius:7px; background:var(--surface); color:var(--text); font:inherit; font-size:11px; }
.rx-task-pager-nav { flex:0 0 auto; }
.rx-task-pager b { color:var(--text-muted); font-size:11px; font-weight:600; font-variant-numeric:tabular-nums; white-space:nowrap; }
.rx-task-pager .btn:disabled { opacity:.45; cursor:not-allowed; }
/* 1280px 桌面扣掉固定侧栏后，剩余宽度不足以同时容纳 380px 表单和三联审核行。 */
@media(max-width:1320px){.rx-layout{grid-template-columns:1fr}}
@media(max-width:900px){.rx-toolbar{align-items:flex-start;flex-wrap:wrap}.rx-audience{margin-left:auto}.rx-filters{order:3;width:100%}.rx-picker-grid{grid-template-columns:1fr}.rx-picker-toolbar{flex-wrap:wrap}.rx-picker-toolbar label{flex-basis:100%}.rx-picker-summary{flex-direction:column}.rx-task-pager{align-items:flex-start;flex-direction:column}.rx-task-pager-meta{flex-wrap:wrap}
/* 父卡只有两格媒体流; app.css 在 900px 下把 .sr-flow 换成三列网格, 会空出一列 */
.rx-page .rx-standard-row .sr-flow{grid-template-columns:repeat(2,1fr)}}
@media(prefers-reduced-motion:reduce){.rx-spinner{animation:none}.rx-toast{transition:none}}

/* Inline batch summaries use the existing task surface and theme tokens. */
.rx-page .sr-batch-group { min-width:0; border:1px solid var(--border); border-radius:10px; background:var(--surface); }
.rx-page .sr-batch-heading { display:flex; align-items:center; gap:12px; padding:14px 16px; }
.rx-page .sr-batch-heading-main { display:flex; flex:1; flex-wrap:wrap; align-items:center; gap:6px 8px; min-width:0; }
.rx-page .sr-batch-heading-main>strong { flex:1 1 180px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-size:14px; }
.rx-page .sr-batch-counts { display:flex; flex-wrap:wrap; flex-basis:100%; gap:4px 12px; font-size:12px; color:var(--text-muted); }
.rx-page .sr-batch-heading>button { flex:none; }
.rx-page .sr-batch-body { padding:0 16px; border-top:1px solid var(--border); background:var(--surface); }
.rx-page .sr-batch-body[hidden], .rx-page .sr-batch-body nav[hidden] { display:none; }
.rx-page .sr-batch-body .sr-row { border-radius:0; }
@media(max-width:760px) {
  .rx-page .sr-batch-heading { padding:12px; gap:8px; }
  .rx-page .sr-batch-body { padding:0 12px; }
}

.rx-page .sr-batch-body > .rx-task-pager { margin:0; padding:12px 0; border:0; flex-direction:row; align-items:center; }
.rx-page [data-sr-batch-items] { gap:0; }

/* Task failures remain readable inside the current workbench dialog. */
#remix-workbench .sr-err {background:var(--error-bg);color:var(--error-text);border:1px solid var(--error-border);font-size:var(--fs-sm);padding:10px 12px;}

html[lang="en"] .rx-workflow-body:empty::before { content:"Loading task details…"; }
