/* 任务托盘。定位在顶栏下方，浮在内容之上——它是随手一瞥的东西，
   不该把页面挤开，也不该盖住正在编辑的输入框。 */
.tasks-btn-v123{position:relative}
.tasks-badge-v123{
  display:inline-flex;align-items:center;justify-content:center;
  min-width:17px;height:17px;margin-left:6px;padding:0 5px;
  border-radius:99px;background:var(--gold);color:#1b1b16;
  font-size:11px;font-weight:700;line-height:1;
}
/* hidden 必须真的能藏住：本类设了 display:flex，而作者样式优先级高于
   浏览器默认的 [hidden]{display:none}，所以要显式写回来，
   否则「关闭」按钮点了没反应（用户实测踩到）。 */
.tasks-panel-v123[hidden]{display:none !important}
.tasks-panel-v123{
  /* z-index 105：压在弹窗遮罩（100）上面。平时遮罩盖住顶栏、点不到任务按钮，只有下面那几种「当成一页用」的弹窗会让出顶栏 */
  position:fixed;top:56px;right:14px;z-index:105;width:min(380px,calc(100vw - 28px));
  max-height:min(70vh,560px);display:flex;flex-direction:column;
  border:1px solid var(--line2);border-radius:14px;background:var(--surface);
  box-shadow:0 18px 48px rgba(0,0,0,.45);overflow:hidden;
}
.tasks-head-v123{
  display:flex;align-items:center;justify-content:space-between;
  padding:11px 14px;border-bottom:1px solid var(--line);font-size:13.5px;
}
.tasks-head-v123 button{background:none;border:0;color:var(--muted);font-size:19px;cursor:pointer;line-height:1}
.tasks-head-v123 button:hover{color:var(--text)}
.tasks-body-v123{overflow-y:auto;padding:6px 0}
.tasks-empty-v123{margin:0;padding:22px 16px;font-size:12.5px;line-height:1.7;color:var(--muted);text-align:center}
.tasks-group-v123{
  padding:9px 14px 5px;font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--dim);
}
.tasks-row-v123{display:flex;align-items:center;gap:10px;padding:8px 14px}
.tasks-row-v123:hover{background:var(--surface2)}
.tasks-thumb-v123{
  flex:0 0 46px;width:46px;height:46px;border-radius:9px;overflow:hidden;
  background:var(--surface3);display:flex;align-items:center;justify-content:center;
}
.tasks-thumb-v123 img,.tasks-thumb-v123 video{width:100%;height:100%;object-fit:cover;display:block}
.tasks-spin-v123{
  width:15px;height:15px;border:2px solid rgba(255,255,255,.14);
  border-top-color:var(--gold);border-radius:50%;animation:v123spin 1s linear infinite;
}
@keyframes v123spin{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){.tasks-spin-v123{animation:none}}
.tasks-meta-v123{min-width:0;flex:1}
.tasks-meta-v123 b{display:block;font-size:13px;font-weight:600;color:var(--text);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tasks-meta-v123 span{display:block;margin-top:2px;font-size:11.5px;color:var(--muted);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tasks-bar-v123{margin-top:6px;height:3px;border-radius:99px;background:var(--surface3);overflow:hidden}
.tasks-bar-v123 i{display:block;height:100%;background:var(--gold);border-radius:99px;transition:width .6s ease}
/* 只认按钮：面板开着时 <body> 上也挂着同名的类（v123-tasks.js 的 toggle，下面让「回到顶部」让开用的）。
   不写 button 的话这几行连 <body> 一起套上——整页多一圈 99px 的圆角边、内边距变成 4px 10px（底栏留的 63px 没了），
   顶栏和输入卡往里缩 11px，面板一关又弹回去。 */
button.tasks-open-v123{
  flex:0 0 auto;padding:4px 10px;border-radius:99px;font-size:12px;text-decoration:none;
  border:1px solid var(--line2);color:var(--muted);
  /* 从 a 改成 button：按钮自带的背景、字体和内边距要清掉，外观保持不变 */
  background:transparent;font-family:inherit;line-height:1.4;cursor:pointer;
}
button.tasks-open-v123:hover{border-color:var(--gold);color:var(--gold)}
@media (max-width:640px){.tasks-panel-v123{top:auto;bottom:70px;right:8px;left:8px;width:auto}}

/* 已完成的行整行可点：回到成片页做「改提示词再生成 / 存素材」 */
.tasks-row-v123[data-done="1"]{cursor:pointer}
.tasks-row-v123[data-failure="1"]{cursor:pointer}
.tasks-failure-icon-v123{color:#ed9d96;font-size:22px;font-weight:700}
.task-failure-dialog-v123{width:min(760px,calc(100vw - 32px));max-height:85dvh;padding:0;border:1px solid var(--line2);border-radius:18px;background:var(--surface,#161618);color:var(--text,#f2f2f4);box-shadow:0 24px 80px #0009;overflow:auto}
.task-failure-dialog-v123::backdrop{background:#0009}
.task-failure-dialog-v123 header{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:22px 26px;border-bottom:1px solid var(--line)}
.task-failure-dialog-v123 h2{font-size:22px;margin:0}
.task-failure-dialog-v123 header button{border:0;background:none;color:var(--muted);font-size:26px;cursor:pointer}
.task-failure-body-v123{padding:16px 26px;font-size:14px;line-height:1.65}
.task-failure-name-v123{color:var(--muted);overflow-wrap:anywhere}
.task-failure-body-v123 h3{font-size:14px;margin:18px 0 8px}
.task-failure-body-v123 pre{white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word;font:inherit;padding:14px;background:var(--surface2,#222226);border:1px solid var(--line);border-radius:10px;color:#f0b4a5;max-height:260px;overflow:auto}
.task-failure-body-v123 dl{margin:20px 0 0}
.task-failure-body-v123 dl>div{display:grid;grid-template-columns:140px minmax(0,1fr);gap:12px;margin:9px 0}
.task-failure-body-v123 dt{color:var(--muted)}
.task-failure-body-v123 dd{margin:0;overflow-wrap:anywhere}
.task-failure-dialog-v123 footer{display:flex;justify-content:flex-end;flex-wrap:wrap;gap:10px;padding:16px 26px;border-top:1px solid var(--line)}
.task-failure-dialog-v123 footer button{min-height:42px}
@media(max-width:600px){.task-failure-dialog-v123 header,.task-failure-body-v123,.task-failure-dialog-v123 footer{padding:16px}.task-failure-body-v123 dl>div{grid-template-columns:1fr;gap:0}.task-failure-dialog-v123 footer button{flex:1 1 auto}}
.tasks-row-v123[data-done="1"]:hover{background:var(--surface2)}

/* 状态点：一眼分出「在跑 / 好了 / 失败」，不用读文字 */
.tasks-dot-v123{
  flex:0 0 auto;width:7px;height:7px;border-radius:50%;margin-right:-3px;
  background:var(--dim);
}
.tasks-dot-v123.ok{background:#4caf6d}
.tasks-dot-v123.bad{background:#c9564f}
.tasks-dot-v123.run{background:var(--gold);animation:v123pulse 1.4s ease-in-out infinite}
@keyframes v123pulse{0%,100%{opacity:1}50%{opacity:.35}}
@media (prefers-reduced-motion:reduce){.tasks-dot-v123.run{animation:none}}

/* 有成片等着看时角标变绿，和「还在忙」的金色区分开 */
.tasks-badge-v123.done{background:#2ea043;color:#fff}
/* 没登录点「任务」：登录框顶上那一行说明（和社区的 .login-note-v140 一个样子；类名分开，社区那一行只在点 skill 时出现） */
.login-note-v123{margin:0 0 12px;padding:9px 12px;border-radius:10px;border:1px solid rgba(255,200,97,.35);background:rgba(255,200,97,.08);color:var(--gold2);font-size:13px;font-weight:600}

/* 提交后飞进顶栏的缩略图：position:fixed，页面重绘不影响它 */
.tasks-fly-v123{
  position:fixed;z-index:9999;pointer-events:none;
  border-radius:12px;background:#26262b center/cover no-repeat;
  box-shadow:0 12px 34px rgba(0,0,0,.4);
}
.tasks-fly-v123 svg{display:block;width:100%;height:100%;padding:8px;box-sizing:border-box;stroke:var(--gold);fill:none;stroke-width:1.5}
@media(max-width:760px){
  /* 和社区、语言两个圆钮一样 40×40（以前 min-height:44px 把它撑成了 40×44 的椭圆） */
  .top-actions #tasksBtn{display:inline-flex;align-items:center;justify-content:center;min-height:40px;padding:8px;font-size:12px}
  .top-actions #avatarText{display:none}
}
/* 落地时顶栏按钮弹一下，视线落点在这里 */
.tasks-pulse-v123{animation:tasksPulseV123 .7s cubic-bezier(.34,1.56,.64,1)}
@keyframes tasksPulseV123{
  0%{transform:scale(1)}30%{transform:scale(1.16)}
  60%{transform:scale(.97)}100%{transform:scale(1)}
}
@media (prefers-reduced-motion: reduce){
  .tasks-pulse-v123{animation:none}
}

/* 托盘哪里都打得开（owner 2026-09-29 第 6 条）：「当成一页用」的弹窗（社区里的 skill 详情、「我的 skill」列表、创作页的 skill 详情）
   开着时顶栏留在遮罩上面（任务按钮照样点得到），遮罩和弹窗让出顶栏那一截。
   哪些弹窗算只在 v123-tasks.js 的 PAGE_LIKE 里列一次：它给 body 挂 page-modal-v123、给那一层挂 data-page-v123（复查 Q7）。
   顶栏上别的按钮（logo、快速创作、社区）点了会换页：v140 换页时把这种弹窗收掉，不留在新的一页上（复查 Q1）。
   --tasks-top-v123 是 v123-tasks.js 量的真顶栏高度（clamp 出来的）。别的弹窗照旧整个盖住页面。 */
body.modal-open.page-modal-v123 .topbar{z-index:101}
body.modal-open #modalRoot .modal-layer[data-page-v123]{top:var(--tasks-top-v123,66px)}
body.modal-open #modalRoot .modal-layer[data-page-v123]>.modal{max-height:calc(100dvh - var(--tasks-top-v123,66px) - 40px)}
@media (min-width:761px){
  /* 让出顶栏以后弹窗矮了一截：头和脚不动，只有中间滚（复查 Q5：1440×900 上「我的 skill」底下的「新建 skill」被截掉） */
  body.modal-open #modalRoot .modal-layer[data-page-v123]>.modal{display:flex;flex-direction:column;overflow:hidden}
  body.modal-open #modalRoot .modal-layer[data-page-v123]>.modal>.modal-head,
  body.modal-open #modalRoot .modal-layer[data-page-v123]>.modal>.modal-foot{flex:none}
  body.modal-open #modalRoot .modal-layer[data-page-v123]>.modal>.modal-body{flex:1 1 auto;min-height:0;overflow:auto}
}
@media (max-width:760px){
  /* 手机上弹窗是贴底的一张（v117-refinement.css），只要别长到顶栏里去 */
  body.modal-open #modalRoot .modal-layer[data-page-v123]>.modal{max-height:calc(100dvh - var(--tasks-top-v123,60px) - 8px)}
  /* 底部那条模式导航长在顶栏里：顶栏抬上来它也跟着浮到弹窗上面，会压住弹窗底下的按钮。弹窗开着时照旧看不见它 */
  body.modal-open.page-modal-v123 .topbar .mode{visibility:hidden}
  /* 手机上顶栏不吸顶（html 的 overflow-x:hidden 让 sticky 失效）：往下滚过再点开详情，顶栏早就滚出去了。弹窗开着时把它钉在顶上 */
  body.modal-open.page-modal-v123 .topbar{position:fixed;top:0;left:0;right:0}
}
/* 手机上面板从底下升起来，盖在「回到顶部」那一块：开着时它让开（创作页的和社区页的是同一个类） */
@media (max-width:640px){body.tasks-open-v123 .back-to-top-v130{visibility:hidden}}
