  /* ====================================================================
     易图商拍 · 功能工作台(生图 / 视频 / 充值)
     左侧功能栏 + 中间参数面板 + 右侧结果区 — 单页应用,数据驱动
  ==================================================================== */
  :root {
    --bg:#070710; --bg-soft:#0d0d18; --panel:#0a0a14;
    --glass:rgba(255,255,255,0.045); --glass-2:rgba(255,255,255,0.08); --glass-bd:rgba(255,255,255,0.10);
    --ink:#f4f4fb; --ink-soft:#9c9cb6; --ink-dim:#62627a;
    --c1:#8b5cf6; --c2:#ec4899; --c3:#22d3ee;
    --grad:linear-gradient(115deg,#a78bfa,#ec4899 55%,#22d3ee);
    --grad-soft:linear-gradient(115deg,rgba(167,139,250,.16),rgba(236,72,153,.16));
    --ease:cubic-bezier(.22,.61,.36,1);
    --topbar:64px;
    --slot-preview-matte:#000;
  }
  * { box-sizing:border-box; margin:0; padding:0; }
  /* overscroll-behavior:none 加在 html/body 顶层:整个 SPA 一律不响应浏览器 swipe-back / pull-to-refresh 手势,
     不论子容器有没有滚动能力都彻底断掉。子面板(#providerView / #rechargeView)也各自 contain 一遍是双保险。 */
  html { overscroll-behavior:none; }
  body { font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;
    background:var(--bg); color:var(--ink); -webkit-font-smoothing:antialiased; overflow:hidden; height:100vh;
    overscroll-behavior:none; }
  a { text-decoration:none; color:inherit; }
  ::selection { background:rgba(236,72,153,.35); }
  ::-webkit-scrollbar { width:9px; height:9px; }
  ::-webkit-scrollbar-thumb { background:rgba(255,255,255,.1); border-radius:9px; }
  ::-webkit-scrollbar-thumb:hover { background:rgba(255,255,255,.18); }

  /* 背景极光 */
  .aurora { position:fixed; inset:0; z-index:0; overflow:hidden; pointer-events:none; opacity:.5; }
  .blob { position:absolute; border-radius:50%; filter:blur(85px); mix-blend-mode:screen; will-change:transform; }
  .blob.b1 { width:600px; height:600px; background:#7c3aed; top:-200px; left:-100px; }
  .blob.b2 { width:500px; height:500px; background:#22d3ee; bottom:-200px; right:-100px; }

  .btn { display:inline-flex; align-items:center; justify-content:center; gap:8px; cursor:pointer; font-family:inherit;
    font-size:14px; font-weight:700; border:none; border-radius:12px; padding:11px 20px; transition:all .25s var(--ease);
    position:relative; overflow:hidden; }
  .btn-primary { background:var(--grad); background-size:200% 200%; color:#fff; box-shadow:0 6px 24px rgba(167,139,250,.4); }
  .btn-primary:hover { transform:translateY(-2px); background-position:100% 0; box-shadow:0 12px 36px rgba(236,72,153,.5); }
  .btn-primary:disabled { opacity:.4; cursor:not-allowed; transform:none; box-shadow:none; }
  .btn-ghost { background:var(--glass); color:var(--ink); border:1px solid var(--glass-bd); }
  .btn-ghost:hover { border-color:rgba(255,255,255,.28); background:var(--glass-2); }

  /* ============ 顶栏 ============ */
  .topbar { position:fixed; top:0; left:0; right:0; height:var(--topbar); z-index:30; display:flex; align-items:center;
    gap:18px; padding:0 22px; background:rgba(7,7,16,.7); backdrop-filter:blur(18px);
    border-bottom:1px solid var(--glass-bd); }
  .logo { display:flex; align-items:center; gap:10px; font-weight:800; font-size:18px; flex-shrink:0; }
  .logo .mark { width:32px; height:32px; border-radius:9px; background:var(--grad); display:grid; place-items:center; font-size:16px; color:#fff; flex-shrink:0; }
  .top-right { display:flex; align-items:center; gap:10px; flex-shrink:0; }

  /* ============ 顶栏内的功能切换条(原左侧功能栏收进顶栏,让中间操作区更宽) ============ */
  /* 15 个功能收进 5 个主分类,点开下拉才展开子功能——避免 15 个功能平铺成一整排造成的杂乱 */
  .top-tools { flex:1 1 auto; min-width:0; display:flex; align-items:center; gap:6px; height:100%; overflow-x:auto;
    scrollbar-width:none; -ms-overflow-style:none; padding:0 6px; }
  .top-tools::-webkit-scrollbar { display:none; }
  @media (max-width:980px){ .top-tools { display:none; } }
  /* 分类按钮本身就是 flex 容器(不再套一层 wrapper div)——wrapper 是默认 display:block 的 flex item,
     里面塞一个 display:flex 的子元素,在这套横向滚动条布局里会让 wrapper 自己的高度塌陷成 0(子元素仍会溢出可见,但会影响布局排列),拍平成单层就没有这个问题 */
  .tt-cat { display:flex; align-items:center; gap:7px; white-space:nowrap; font-size:13.5px; font-weight:600;
    padding:9px 16px; border:0; background:transparent; font-family:inherit; border-radius:999px; color:var(--ink-soft); cursor:pointer; transition:all .2s var(--ease); flex-shrink:0; }
  .tt-cat:hover { background:var(--glass); color:var(--ink); }
  .tt-cat.active { background:var(--grad-soft); color:var(--ink); font-weight:700; box-shadow:inset 0 0 0 1px rgba(255,255,255,.1); }
  .tt-cat .ic { font-size:16px; }
  .tt-cat .tt-caret { font-size:10px; color:var(--ink-dim); transition:transform .2s var(--ease); }
  .tt-cat.open .tt-caret { transform:rotate(180deg); }
  /* 「AI 画布」一级特殊入口:即梦调性(第二百四十轮重做)——深灰胶囊 + 青色文字/细描边,克制不抢;
     此前的粉紫大渐变与即梦的中性审美冲突,用户贴图点名整改 */
  .tt-canvas { border:1px solid rgba(60,214,245,.32); color:#3cd6f5; background:rgba(60,214,245,.06); }
  .tt-canvas:hover { border-color:rgba(60,214,245,.55); background:rgba(60,214,245,.11); color:#7ae4ff; }
  .tt-canvas.active { font-weight:700; border-color:rgba(60,214,245,.8); background:rgba(60,214,245,.14); color:#8fe9ff; }
  .tt-canvas .tt-canvas-spark { font-size:10px; color:#3cd6f5; }
  /* 下拉用 fixed 定位(由 JS 按触发按钮位置计算),不受顶栏横向滚动容器裁切影响 */
  .tt-dropdown { position:fixed; min-width:212px; background:var(--bg-soft); border:1px solid var(--glass-bd); border-radius:16px;
    padding:8px; box-shadow:0 24px 60px rgba(0,0,0,.6); opacity:0; visibility:hidden; transform:translateY(-8px);
    transition:all .2s var(--ease); z-index:200; display:grid; gap:2px; }
  .tt-dropdown.tt-dropdown-outfit { min-width:280px; }
  .tt-dropdown.show { opacity:1; visibility:visible; transform:none; }
  .tt-opt { display:flex; align-items:center; gap:10px; padding:10px 12px; border-radius:10px; font-size:13.5px;
    color:var(--ink-soft); border:0; background:transparent; font-family:inherit; text-align:left; cursor:pointer; transition:all .18s; white-space:nowrap; }
  .tt-opt:hover { background:var(--glass); color:var(--ink); }
  .tt-opt.active { background:var(--grad-soft); color:var(--ink); font-weight:700; }
  .tt-opt:focus-visible { outline:2px solid rgba(125,211,252,.55); outline-offset:2px; }
  .tt-opt .ic { width:22px; height:22px; display:grid; place-items:center; flex:0 0 22px; color:#7dd3fc; }
  .ui-icon { width:20px; height:20px; display:block; overflow:visible; }
  .tt-cat .ic { width:20px; height:20px; display:grid; place-items:center; flex:0 0 20px; color:#7dd3fc; }
  .tt-cat .ic .ui-icon { width:18px; height:18px; }
  .tt-opt .ic .ui-icon { width:19px; height:19px; }
  .tt-opt .badge-new { margin-left:auto; font-size:9px; font-weight:800; background:var(--grad); color:#fff; padding:1px 6px; border-radius:999px; }
  .tt-opt-rich { min-width:292px; padding:12px 13px; gap:12px; border:1px solid transparent; border-radius:12px; white-space:normal; }
  .tt-opt-rich .ic { width:36px; height:36px; flex-basis:36px; border-radius:11px; color:#38bdf8; background:rgba(125,211,252,.1); }
  .tt-opt-rich .ic .ui-icon { width:21px; height:21px; }
  .tt-opt-copy { min-width:0; display:flex; flex:1; flex-direction:column; gap:3px; }
  .tt-opt-copy b { color:var(--ink); font-size:14px; font-weight:750; line-height:1.25; }
  .tt-opt-copy small { color:var(--ink-dim); font-size:11px; font-weight:550; line-height:1.35; white-space:nowrap; }
  .tt-opt-enter { display:flex; align-items:center; gap:4px; color:var(--ink-dim); font-size:10.5px; font-weight:750; transition:color .18s,transform .18s var(--ease); }
  .tt-opt-rich:hover { border-color:rgba(125,211,252,.24); transform:translateY(-1px); }
  .tt-opt-rich:hover .tt-opt-enter { color:#7dd3fc; transform:translateX(2px); }
  .tt-opt-rich.active { border-color:rgba(125,211,252,.3); box-shadow:inset 0 1px 0 rgba(255,255,255,.045); }
  html:not([data-theme="light"]) .tt-opt-rich.active { background:rgba(125,211,252,.085); color:var(--ink); border-color:rgba(125,211,252,.3); }
  /* 顶栏「返回首页」——工作台内唯一的强引导入口,常驻可见,不依赖 hover 提示或下拉菜单 */
  .home-btn { display:flex; align-items:center; gap:7px; background:var(--glass); border:1px solid var(--glass-bd);
    padding:8px 14px; border-radius:999px; font-size:13.5px; font-weight:600; color:var(--ink-soft); cursor:pointer; transition:all .2s var(--ease); flex-shrink:0; }
  .home-btn:hover { border-color:rgba(255,255,255,.25); color:var(--ink); }
  .home-btn .hb-ic { font-size:15px; }
  .desktop-entry-btn { display:none !important; }
  .desktop-entry-icon { font-size:15px; }
  .desktop-expiry-dot { width:8px; height:8px; border-radius:50%; background:#fbbf24; box-shadow:0 0 0 3px rgba(251,191,36,.16); }
  /* 顶栏算力入口:单层紧凑信息块。专用 bp-* 类避免再次与充值套餐 .amt 卡片样式串扰。 */
  .balance-pill { min-height:40px; display:flex; align-items:center; gap:8px; background:rgba(255,255,255,.045);
    border:1px solid rgba(255,255,255,.09); padding:5px 7px 5px 8px; border-radius:13px; color:inherit;
    font:14px/1 inherit; cursor:pointer; transition:transform .2s var(--ease),background .2s,border-color .2s,box-shadow .2s;
    flex-shrink:0; box-shadow:inset 0 1px 0 rgba(255,255,255,.035); }
  .balance-pill:hover { transform:translateY(-1px); background:rgba(255,255,255,.07); border-color:rgba(167,139,250,.3);
    box-shadow:0 8px 22px rgba(0,0,0,.18),inset 0 1px 0 rgba(255,255,255,.05); }
  .balance-pill:focus-visible { outline:none; border-color:rgba(167,139,250,.65); box-shadow:0 0 0 3px rgba(167,139,250,.14); }
  .balance-pill.active { border-color:rgba(167,139,250,.42); background:var(--grad-soft); box-shadow:inset 0 0 0 1px rgba(167,139,250,.2); }
  .balance-pill .bp-icon { width:27px; height:27px; border-radius:9px; display:grid; place-items:center; flex:0 0 auto;
    background:linear-gradient(145deg,rgba(167,139,250,.18),rgba(34,211,238,.1)); color:#bdefff; font-size:12px; }
  .balance-pill .bp-main { display:flex; align-items:baseline; gap:5px; white-space:nowrap; }
  .balance-pill .lbl { color:var(--ink-dim); font-size:10px; font-weight:650; }
  .balance-pill .bp-value { min-width:1.8ch; font-size:14px; font-weight:850; font-variant-numeric:tabular-nums;
    letter-spacing:.1px; background:var(--grad); -webkit-background-clip:text; background-clip:text; color:transparent; }
  .balance-pill .bp-action { min-height:28px; display:flex; align-items:center; padding:0 9px; border-left:1px solid rgba(255,255,255,.08);
    color:var(--c3); font-size:11px; font-weight:750; white-space:nowrap; }
  .avatar { width:34px; height:34px; border-radius:50%; background:var(--grad); display:grid; place-items:center; font-size:15px; cursor:pointer; flex-shrink:0; }
  /* 窄屏(手机)优先保证「首页」按钮和头像菜单不被顶栏挤出屏幕外——曾经在 iPhone 常见宽度下头像下拉菜单整个溢出、点不到 */
  @media (max-width:640px){ .home-btn .hb-label, .desktop-entry-label { display:none; } .home-btn, .desktop-entry-btn { padding:8px 10px; } }
  @media (max-width:480px){
    .logo-text { display:none; }
    /* 第三百四十五轮:home-btn 不再整块隐藏——回首页是"临时用工作台生一张后去别功能"的高频路径,
       之前必须点头像→展开 acct-menu→找"首页" 3 步。@media(max-width:640px) 已把 label 隐藏成 icon-only,
       此处让 icon 继续显示即可,顶栏还余 200px 空位放得下。 */
    .balance-pill .bp-icon, .balance-pill .bp-action { display:none; }
    .balance-pill .lbl { display:inline; color:#aaaac0; font-size:10px; }
    .balance-pill { min-height:36px; gap:5px; padding:7px 10px; border-radius:11px; }
    .balance-pill .bp-value { font-size:13px; }
    .top-right { gap:8px; }
  }
  .backend-badge { font-size:12px; font-weight:700; padding:6px 12px; border-radius:999px; background:var(--glass); border:1px solid var(--glass-bd); color:var(--ink-soft); white-space:nowrap; cursor:pointer; transition:all .2s var(--ease); }
  .backend-badge:hover { border-color:rgba(255,255,255,.28); color:var(--ink); }
  .backend-badge[data-state]::before { content:""; display:inline-block; width:7px; height:7px; margin-right:6px; border-radius:50%; vertical-align:1px; background:#6b8f71; }
  .backend-badge[data-state="bad"]::before { background:#c75b5b; }
  @media (max-width:600px){ .backend-badge { display:none !important; } }
  /* 账户下拉菜单 */
  .acct { position:relative; }
  .acct-menu { position:absolute; top:46px; right:0; width:216px; background:var(--bg-soft); border:1px solid var(--glass-bd); border-radius:16px;
    padding:8px; box-shadow:0 24px 60px rgba(0,0,0,.6); opacity:0; visibility:hidden; transform:translateY(-8px); transition:all .22s var(--ease); z-index:40; }
  .acct-menu.show { opacity:1; visibility:visible; transform:none; }
  .acct-head { display:flex; align-items:center; gap:11px; padding:10px 10px 14px; border-bottom:1px solid rgba(255,255,255,.07); margin-bottom:6px; }
  .acct-head .avatar.sm { width:38px; height:38px; font-size:17px; }
  .acct-head .an { font-size:14px; font-weight:700; }
  .acct-head .ap { font-size:12px; color:var(--ink-dim); margin-top:2px; }
  /* 菜单里既有真跳转的 <a href>,也有触发脚本的 <button>(原先是没有 href 的 <a>,
     鼠标点得到但 Tab 走不到 —— 运营控制台入口就在其中,键盘用户进不了后台)。
     两者外观完全一致,button 这边额外抹掉 UA 的边框/背景/字体/宽度。 */
  .acct-menu :is(a,button) { display:flex; align-items:center; gap:11px; padding:10px 12px; border-radius:10px; font-size:14px; color:var(--ink-soft); cursor:pointer; transition:all .18s; }
  .acct-menu button { width:100%; border:0; background:none; font-family:inherit; font-weight:inherit; text-align:inherit; }
  .acct-menu :is(a,button):hover { background:var(--glass); color:var(--ink); }
  .acct-menu :is(a,button) span { font-size:16px; width:20px; text-align:center; }
  .acct-div { height:1px; background:rgba(255,255,255,.07); margin:6px 4px; }
  .acct-trigger { display:flex; align-items:center; gap:4px; cursor:pointer; border:0; background:none; color:inherit; padding:0; font:inherit; }
  .acct-caret { font-size:13px; color:var(--ink-soft); line-height:1; }
  .acct-menu :is(a,button).current { color:var(--ink); background:var(--glass); }
  .acct-menu :is(a,button).current::after { content:'当前'; margin-left:auto; font-size:11px; color:var(--c3); font-weight:700; }
  #desktopUserLicenseEntry { display:none !important; }

  /* ============ 主区 ============ */
  .main { position:fixed; top:var(--topbar); left:0; right:0; bottom:0; z-index:10; overflow:hidden; }

  /* ============ 运营控制台外壳(第二百六十三轮建立,第八百五十九轮重排侧栏) ============
     统一壳:顶栏 admin-top-context + 侧栏 admin-console-nav + 各内容视图。
     侧栏层次自上而下分三级:品牌页头(带下分隔线)→ 分组小标题(11px 灰,分簇 1/3/3/2)→ 导航项。
     只靠空白分簇不够——9 项等权铺开时一眼看不出哪几项是一类;小标题回来后每簇最多 3 项,
     配合行首竖条的现行态,扫视成本从"读 9 个词"降到"先定位到一簇再读 2~3 个词"。 */
  /* 顶栏当前位置 = 内容区 admin-page-head 的压缩版:同一套「标题 + 一句话说明」语言,色阶也复用
     --ink / --ink-soft,与 .admin-page-copy 的 h1 / p 逐层对齐。说明原先取 --ink-dim,在现行黑白主题下
     白天 #8a8a8a 落到 rgba(255,255,255,.96) 顶栏只有约 3.5:1、黑夜 #717171 落到 rgba(5,5,5,.96) 约 4.2:1,
     12px 正文两头都不到 WCAG AA 的 4.5:1;换 --ink-soft 后白天约 7.5:1、黑夜约 9.7:1。
     b 与 span 都要 min-width:0 才能真正省略:nowrap 元素的自动最小尺寸等于整段文字宽度,
     不显式归零就不会收缩,而是把 .top-right 的主题开关和头像顶出屏幕。 */
  .admin-top-context { display:none; flex:1 1 auto; min-width:0; align-items:center; gap:10px; color:var(--ink-soft); }
  .admin-top-search, .logo-admin-caption { display:none; }
  .admin-top-context b { flex:0 1 auto; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
    color:var(--ink); font-size:14px; font-weight:750; letter-spacing:-.01em; line-height:1.3; }
  /* flex:1 1 0 而不是 auto:让说明独占剩余空间并第一个被压缩,页名尽量保持完整 */
  .admin-top-context span { flex:1 1 0; min-width:0; padding-left:10px; border-left:1px solid var(--glass-bd);
    color:var(--ink-soft); font-size:12.5px; line-height:1.35;
    overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  body.admin-mode .top-tools { display:none; }
  body.admin-mode .admin-top-context { display:flex; }
  body.admin-mode .home-btn, body.admin-mode .desktop-entry-btn, body.admin-mode .balance-pill { display:none; }
  /* 客户邀请推广只在前台展示；切回工作台时恢复，后台邀请返利管理入口保持。 */
  body.admin-mode #siteBanner, body.admin-mode #acctMenu a[href="/invite"] { display:none; }
  body.admin-mode .m-params-fab, body.admin-mode .m-params-close, body.admin-mode .m-params-mask { display:none !important; }
  /* 侧栏底色比正文深/浅一档而不是完全同色:两个主题的正文都是纯黑或纯白,同色只剩一条描边,
     导航区和内容区会糊成一片。 */
  .admin-console-nav { display:none; position:absolute; inset:0 auto 0 0; width:222px; padding:16px 12px 12px;
    border-right:1px solid var(--glass-bd); background:rgba(10,10,10,.92); backdrop-filter:blur(18px);
    flex-direction:column; overflow-y:auto; overscroll-behavior:contain; z-index:8; }
  body.admin-mode .admin-console-nav { display:flex; }
  .admin-nav-head { display:flex; align-items:center; gap:10px; margin-bottom:14px; padding:2px 8px 13px;
    border-bottom:1px solid var(--glass-bd); }
  /* 品牌方块用 ink/bg 令牌反色:当前生效的黑白极简主题里 --grad 是纯白/纯黑,直接用会白底白字 */
  .admin-nav-mark { flex:none; display:grid; place-items:center; width:28px; height:28px; border-radius:8px;
    background:var(--ink); color:var(--bg); }
  .admin-nav-mark svg { width:13px; height:13px; }
  .admin-nav-head-copy { display:flex; flex-direction:column; gap:2px; min-width:0; }
  .admin-nav-head-copy b { color:var(--ink); font-size:13px; font-weight:800; letter-spacing:.02em; line-height:1.15; }
  .admin-nav-head-copy i { font-style:normal; color:var(--ink-dim); font-size:9.5px; font-weight:700; letter-spacing:.16em; text-transform:uppercase; }
  .admin-nav-group { display:flex; flex-direction:column; gap:1px; }
  .admin-nav-group + .admin-nav-group { margin-top:14px; }
  /* 小标题只做"分簇路牌":比导航项小两号、更淡,中文不加大字距(超过 .08em 就散成一个个孤字)。
     文案与外层 role="group" 的 aria-label 同源,由 test_admin_console_title_alignment 锁住。 */
  .admin-nav-group-title { margin:0 0 5px; padding:0 10px; color:var(--ink-dim);
    font-size:11px; font-weight:800; letter-spacing:.08em; line-height:1.4; }
  /* 黑夜同理:--ink-dim(#717171)在 #0a0a0a 底上约 4.1:1,提到 #8a8a8a 约 5.7:1,
     仍比导航项的 --ink-soft(#b3b3b3)暗一档,层次不乱。 */
  html[data-theme="dark"] .admin-nav-group-title { color:#8a8a8a; }
  .admin-nav-btn { position:relative; width:100%; min-height:34px; display:flex; align-items:center; gap:10px;
    padding:8px 10px 8px 13px;
    border:0; border-radius:8px; background:transparent; color:var(--ink-soft); font:600 13px/1.2 inherit;
    cursor:pointer; text-align:left; transition:background .15s var(--ease), color .15s var(--ease); }
  /* 现行项的竖条:黑白主题里没有品牌色可用,靠"行首实心竖条 + 加深底 + 加粗字"三重叠加,
     远比原来那层 1px 描边 + 极浅底(白天 #f3f3f3 描边 #e2e2e2)容易一眼扫到。 */
  .admin-nav-btn::before { content:""; position:absolute; left:3px; top:50%; width:3px; height:0;
    border-radius:2px; background:var(--ink); transform:translateY(-50%);
    transition:height .18s var(--ease); }
  .admin-nav-btn:hover { color:var(--ink); background:var(--glass); }
  .admin-nav-btn.active { color:var(--ink); font-weight:700; background:var(--glass-2); }
  .admin-nav-btn.active::before { height:16px; }
  .admin-nav-icon { flex:none; width:17px; height:17px; color:var(--ink-dim); transition:color .15s var(--ease); }
  .admin-nav-icon svg { display:block; width:100%; height:100%; }
  .admin-nav-btn:hover .admin-nav-icon { color:var(--ink-soft); }
  .admin-nav-btn.active .admin-nav-icon { color:inherit; }
  .admin-nav-label { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .admin-nav-tail { margin-top:auto; padding-top:10px; border-top:1px solid var(--glass-bd); }
  .admin-nav-exit { color:var(--ink-dim); }
  .admin-nav-exit:hover { color:var(--ink); }
  /* 返回工作台是"离开"动作,不属于这 9 项,永远不该点亮竖条 */
  .admin-nav-exit::before { content:none; }
  body.admin-mode #providerView, body.admin-mode #pricingView, body.admin-mode #userView, body.admin-mode #desktopLicenseAdminView, body.admin-mode #officialAssetView, body.admin-mode #auditView, body.admin-mode #promptView, body.admin-mode #analyticsView, body.admin-mode #inviteAdminView { margin-left:222px; padding-top:24px; }
  /* ——— 页头组件:所有后台页共用「kicker + 标题 + 一句话说明 + 主/次操作」 ——— */
  .admin-page-head { display:flex; align-items:flex-end; justify-content:space-between; gap:20px; margin-bottom:20px; }
  .admin-page-copy { flex:1; min-width:0; }
  .admin-page-kicker { display:block; margin-bottom:6px; color:var(--c3); font-size:11px; font-weight:800; letter-spacing:.1em; }
  .admin-page-copy h1 { font-size:25px; font-weight:850; letter-spacing:-.02em; margin:0 0 7px; }
  .admin-page-copy p { max-width:72ch; margin:0; color:var(--ink-soft); font-size:13.5px; line-height:1.65; }
  .admin-page-actions { display:flex; flex:none; align-items:center; gap:9px; }
  .admin-section-head { display:flex; align-items:baseline; gap:12px; flex-wrap:wrap; margin:26px 0 12px; }
  .admin-section-hint { color:var(--ink-dim); font-size:12px; }
  /* 过滤态 chip(例如审计页「只看某用户」) */
  .admin-filter-chip { display:inline-flex; align-items:center; gap:10px; margin:12px 0 0; padding:7px 8px 7px 13px;
    border:1px solid rgba(56,189,248,.3); border-radius:999px; background:rgba(56,189,248,.09); color:var(--ink); font-size:12.5px; }
  .admin-filter-chip[hidden] { display:none; }
  .admin-filter-chip button { border:0; padding:4px 9px; border-radius:999px; background:rgba(56,189,248,.14); color:#7dd3fc; font:700 11.5px/1 inherit; cursor:pointer; }
  .admin-filter-chip button:hover { background:rgba(56,189,248,.24); }
  .admin-range-sep { color:var(--ink-dim); font-size:12px; }
  /* 审计页日期快捷预设:命中当前区间时点亮,与侧栏 active 同语言 */
  .al-preset.active { color:var(--ink); background:var(--grad-soft); border-color:rgba(167,139,250,.32); }
  /* 确认弹窗里的可选开关(如导出是否包含加密 key)。表面与描边走 --adm-* 令牌,
     和同一个弹窗里的影响清单、输入框密度对齐;原来写死的 rgba(255,255,255,.03)
     在白天主题下是透明的,整块开关看不出边界。 */
  .admin-confirm-check { display:flex; align-items:flex-start; gap:9px; margin:0 0 14px; padding:11px 13px;
    border:1px solid var(--adm-bd); border-radius:var(--adm-radius-sm); background:var(--adm-surface); font-size:12.5px; color:var(--ink-soft); cursor:pointer; line-height:1.65; }
  .admin-confirm-check input { width:15px; height:15px; margin-top:2px; flex:none; accent-color:var(--adm-accent); cursor:pointer; }
  .admin-confirm-check:hover { border-color:var(--adm-bd-hi); background:var(--adm-surface-2); }
  @media (max-width:900px){
    /* 顶栏横向空间开始吃紧:标题与说明改成竖排两行,竖线分隔改为纯空白节奏。
       竖排后 flex-basis 作用在高度上,必须把两个子元素改回 0 0 auto,否则 span 的 flex:1 1 0 会被拉伸成半个顶栏高。
       两行合计约 33px,顶栏 64px 放得下。
       更窄处不再另设断点隐藏说明:admin-mode 已经收掉 top-tools / 首页 / 算力,右侧只剩主题开关和头像,
       实测到 375px(最长的一条「数字人、平铺与 3D 参考图路由」)仍能整句显示,320px 才截掉约一个字,
       靠 ellipsis 兜底即可,没必要为此丢掉整句说明。 */
    .admin-top-context { flex-direction:column; align-items:flex-start; justify-content:center; gap:1px; }
    .admin-top-context b, .admin-top-context span { flex:0 0 auto; max-width:100%; }
    .admin-top-context b { font-size:13.5px; }
    .admin-top-context span { width:100%; padding-left:0; border-left:0; font-size:11.5px; line-height:1.3; }
    /* 图标条:文字收起,SVG 线标居中;aria-label 已写在按钮上,读屏不丢名字。
       小标题一并收起(70px 放不下),分簇改由组间横线承担——只留空白的话,
       图标条上四簇会连成一列看不出断点。 */
    .admin-console-nav { width:70px; padding:14px 10px 12px; }
    .admin-nav-head { justify-content:center; margin-bottom:12px; padding:0 0 12px; }
    .admin-nav-head-copy, .admin-nav-label, .admin-nav-group-title { display:none; }
    .admin-nav-group + .admin-nav-group { margin-top:11px; padding-top:11px; border-top:1px solid var(--glass-bd); }
    .admin-nav-btn { justify-content:center; padding:9px 0; }
    /* 图标居中后行首竖条会飘在图标左边像块脏点,现行态改用整块底色 + 图标提亮 */
    .admin-nav-btn::before { content:none; }
    .admin-nav-btn.active .admin-nav-icon { color:var(--ink); }
    body.admin-mode #providerView, body.admin-mode #pricingView, body.admin-mode #userView, body.admin-mode #desktopLicenseAdminView, body.admin-mode #officialAssetView, body.admin-mode #auditView, body.admin-mode #promptView, body.admin-mode #analyticsView, body.admin-mode #inviteAdminView { margin-left:70px; }
    .admin-page-head { flex-direction:column; align-items:stretch; }
    .admin-page-actions { flex-wrap:wrap; }
  }
  @media (max-width:600px){
    /* 底部横条:分簇用竖线分隔,label 回到图标下方。横条本来就只有 62px 高,
       小标题不参与排版,否则整条会被撑成两行、把内容区顶掉一截。 */
    .admin-console-nav { inset:auto 0 0 0; width:auto; height:62px; padding:7px 10px; border-right:none; border-top:1px solid var(--glass-bd);
      /* 8~9 项在 390px 上必然排不下,横滑是唯一不牺牲文字的做法。不做渐隐遮罩:
         滑到尽头时它会把最后一项也啃掉一半,看着像渲染坏了。现行项由
         _setAdminNavActive 主动滚进视野,滑动按项吸附。 */
      flex-direction:row; align-items:center; overflow-x:auto; overflow-y:hidden;
      scroll-snap-type:x proximity; }
    .admin-nav-btn { scroll-snap-align:center; scroll-margin:0 12px; }
    .admin-nav-head, .admin-nav-group-title { display:none; }
    .admin-nav-group { flex-direction:row; gap:2px; }
    .admin-nav-group + .admin-nav-group { border-top:none; border-left:1px solid var(--glass-bd); padding:0 0 0 8px; margin:0 0 0 8px; }
    .admin-nav-tail { margin:0 0 0 8px; padding:0 0 0 8px; border-top:none; border-left:1px solid var(--glass-bd); }
    .admin-nav-btn { min-width:60px; width:auto; min-height:0; flex:0 0 auto; flex-direction:column; gap:4px; padding:6px 8px; }
    /* 竖排图标+文字,行首竖条无处安放,改成顶部一条短横 */
    .admin-nav-btn::before { content:""; left:50%; top:0; width:14px; height:2px;
      transform:translateX(-50%) scaleX(0); transition:transform .18s var(--ease); }
    .admin-nav-btn.active::before { height:2px; transform:translateX(-50%) scaleX(1); }
    .admin-nav-exit::before { content:none; }
    .admin-nav-label { display:block; font-size:9.5px; }
    body.admin-mode #providerView, body.admin-mode #pricingView, body.admin-mode #userView, body.admin-mode #desktopLicenseAdminView, body.admin-mode #officialAssetView, body.admin-mode #auditView, body.admin-mode #promptView, body.admin-mode #analyticsView, body.admin-mode #inviteAdminView { margin-left:0; padding-bottom:84px; }
  }
  /* —— 工作台视图 —— */
  #studioView { display:flex; height:100%; }
  /* 移动端横向功能选择器(替代窄屏下隐藏的侧栏) */
  .mobile-nav { display:none; }
  @media (max-width:980px){
    /* flex-shrink:0 是关键:#studioView 在这个断点是纵向 flex 容器,.mobile-nav 自己又设了 overflow-x:auto,
       这会让浏览器把它的"自动最小高度"算成 0(而不是内容高度)——于是纵向空间不够时,flex 收缩算法会优先把它挤扁到几乎 0px,
       而不是让 params/canvas 分担收缩,表现就是这一整行看起来被从中间裁掉了一大截。显式 flex-shrink:0 禁止收缩,保留声明的 height。 */
    .mobile-nav { display:flex; align-items:center; gap:8px; height:60px; flex-shrink:0; overflow-x:auto; padding:0 14px; border-bottom:1px solid var(--glass-bd);
      background:rgba(10,10,20,.75); backdrop-filter:blur(12px); position:sticky; top:0; z-index:15; }
    .mobile-nav::-webkit-scrollbar { display:none; }
    .mobile-nav .mchip { white-space:nowrap; font-size:13px; font-weight:600; padding:8px 14px; border-radius:999px;
      border:1px solid var(--glass-bd); background:var(--glass); color:var(--ink-soft); cursor:pointer; flex-shrink:0; }
    .mobile-nav .mchip.active { background:var(--grad); color:#fff; border-color:transparent; }
    .mobile-nav .mchip-nav { background:transparent; }
    .mobile-nav .mnav-div { flex-shrink:0; width:1px; align-self:stretch; background:var(--glass-bd); margin:2px 2px; }
    .mobile-nav .tt-cat { font-size:13px; padding:8px 14px; }
  }
  .m-feature-mask, .m-feature-sheet { display:none; }
  @media (max-width:768px){
    .mobile-nav { overflow:visible; padding:7px 12px; gap:8px; }
    .m-feature-current { flex:1; min-width:0; height:38px; display:flex; align-items:center; gap:9px; padding:0 12px; border:1px solid var(--glass-bd); border-radius:12px; background:rgba(255,255,255,.055); color:var(--ink); font:700 13px/1 inherit; cursor:pointer; text-align:left; }
    .m-feature-current .mfc-icon { width:24px; height:24px; display:grid; place-items:center; border-radius:8px; background:var(--grad-soft); color:#7dd3fc; flex:0 0 auto; }
    .m-feature-current .mfc-icon .ui-icon { width:16px; height:16px; }
    .m-feature-current .mfc-name { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
    .m-feature-current .mfc-cat { margin-left:auto; color:#aaaac0; font-size:11px; font-weight:600; white-space:nowrap; }
    .m-feature-switch { height:38px; flex:0 0 auto; padding:0 14px; border:1px solid rgba(167,139,250,.38); border-radius:12px; background:var(--grad-soft); color:#efe9ff; font:700 13px/1 inherit; cursor:pointer; }
    .m-feature-mask { position:fixed; inset:0; z-index:78; background:rgba(0,0,0,.66); backdrop-filter:blur(8px); }
    .m-feature-sheet { position:fixed; left:10px; right:10px; bottom:10px; z-index:79; max-height:82vh; overflow:auto; border:1px solid rgba(255,255,255,.14); border-radius:24px; background:#12121e; box-shadow:0 28px 80px rgba(0,0,0,.7); padding:18px; }
    body.mfeature-open .m-feature-mask, body.mfeature-open .m-feature-sheet { display:block; }
    .m-feature-sheet-head { display:flex; align-items:center; justify-content:space-between; gap:12px; margin-bottom:14px; }
    .m-feature-sheet-head b { font-size:17px; }
    .m-feature-sheet-head button { width:42px; height:42px; border-radius:50%; border:1px solid var(--glass-bd); background:rgba(255,255,255,.06); color:var(--ink); font-size:18px; cursor:pointer; }
    .m-feature-search { width:100%; height:44px; margin-bottom:14px; padding:0 14px; border:1px solid rgba(255,255,255,.12); border-radius:12px; background:rgba(255,255,255,.055); color:var(--ink); font:14px/1 inherit; }
    .m-feature-search::placeholder { color:#85859a; }
    .m-feature-group + .m-feature-group { margin-top:16px; }
    .m-feature-group-title { display:flex; align-items:center; gap:7px; margin:0 2px 8px; color:#a9a9bf; font-size:11px; font-weight:800; letter-spacing:.08em; }
    .m-feature-group-title .ui-icon { width:15px; height:15px; color:#7dd3fc; }
    .m-feature-grid { display:grid; grid-template-columns:1fr 1fr; gap:8px; }
    .m-feature-option { min-height:48px; padding:10px 11px; border:1px solid rgba(255,255,255,.09); border-radius:13px; background:rgba(255,255,255,.04); color:#c9c9d7; font:650 12.5px/1.3 inherit; text-align:left; cursor:pointer; }
    .m-feature-option.active { border-color:rgba(167,139,250,.55); background:var(--grad-soft); color:#fff; }
    .m-feature-empty { display:none; padding:24px 6px 10px; text-align:center; color:#9696aa; font-size:13px; }
  }
  /* 参数面板宽度随屏幕自适应:窄屏保底 420px,宽屏最多撑到 700px——固定宽度在大屏上字段挤成一团、上传槽也小。
     用户可拖右侧分隔条自定义宽度(见 .params-resizer),拖过就用 inline style 覆盖这个默认值并记进 localStorage */
  .params { width:clamp(420px, 42vw, 700px); flex-shrink:0; height:100%; overflow-y:auto; padding:30px 34px; border-right:1px solid var(--glass-bd); container-type:inline-size; }
  .m-param-overview { display:none; }
  /* 参数面板 / 结果区之间的可拖拽分隔条:平时几乎隐形,hover / 拖拽时高亮成一条渐变竖线 */
  .params-resizer { flex-shrink:0; width:8px; margin:0 -4px; cursor:col-resize; position:relative; z-index:12; }
  .params-resizer::before { content:''; position:absolute; top:0; bottom:0; left:50%; transform:translateX(-50%); width:2px; border-radius:99px; background:transparent; transition:background .18s, width .18s; }
  .params-resizer:hover::before, .params-resizer.dragging::before { background:var(--grad); width:4px; }
  body.resizing-params { cursor:col-resize; user-select:none; }
  /* 参数栏保持可接收 pointerdown，用于拖拽异常中断后的自恢复；结果区在拖动时仍禁用交互。 */
  body.resizing-params .canvas { pointer-events:none; }
  .feat-head { display:grid; grid-template-columns:36px minmax(0,1fr); column-gap:12px; align-items:center; margin-bottom:24px; }
  .feat-head .fh-icon { grid-column:1; grid-row:1; width:36px; height:36px; display:grid; place-items:center; color:#38bdf8; }
  .feat-head .fh-icon .ui-icon-feature { width:30px; height:30px; }
  .feat-head h1 { grid-column:2; grid-row:1; min-width:0; font-size:23px; font-weight:800; margin:0; }
  .feat-head p { grid-column:1 / -1; font-size:14px; color:var(--ink-soft); line-height:1.6; margin:8px 0 0; }
  .feat-head > .sub-chips { grid-column:1 / -1; }
  .sub-chips { display:flex; gap:8px; flex-wrap:wrap; margin-top:14px; }
  .sub-chip { font-size:12.5px; font-weight:600; padding:7px 14px; border-radius:999px; border:1px solid var(--glass-bd);
    background:var(--glass); color:var(--ink-soft); cursor:pointer; transition:all .2s; }
  .sub-chip:hover { color:var(--ink); border-color:rgba(255,255,255,.25); }
  .sub-chip.active { background:var(--grad); color:#fff; border-color:transparent; }

  .field { margin-bottom:24px; }
  .field-label { font-size:13px; font-weight:700; margin-bottom:11px; display:flex; align-items:center; gap:7px; }
  .field-label .req { color:var(--c2); }
  .field-label .ai-write { margin-left:auto; font-size:12px; font-weight:700; padding:4px 12px; border-radius:999px; border:1px solid var(--glass-bd);
    background:var(--grad-soft); color:var(--ink); cursor:pointer; font-family:inherit; transition:all .2s var(--ease); }
  .field-label .ai-write:hover { box-shadow:inset 0 0 0 1.5px var(--c1); transform:translateY(-1px); }
  .uploads { display:grid; gap:12px; }
  .uploads.two { grid-template-columns:1fr 1fr; }
  /* 场景图：产品图与补充图两个同等大正方形并排，场景图单独一组。边长约 180–260。 */
  .scene-panel { --scene-slot:min(260px,calc((100% - 12px) / 2)); }
  .scene-panel .feat-head { margin-bottom:16px; }
  .scene-panel .feat-head p { margin:6px 0 0; font-size:13px; line-height:1.45; }
  .scene-panel .field { margin-bottom:16px; }
  .scene-panel .field-label { margin-bottom:8px; }
  .scene-panel .scene-label-hint { color:var(--ink-dim); font-weight:500; font-size:12px; }
  .scene-panel .scene-fav-pick { margin-left:auto; color:var(--c3); cursor:pointer; font-weight:600; font-size:12px; white-space:nowrap; }
  .scene-panel .scene-product-row { display:flex; align-items:stretch; gap:12px; max-width:100%; }
  .scene-panel .scene-primary { grid-template-columns:var(--scene-slot); justify-content:start; }
  .scene-panel .scene-product-row .scene-primary, .scene-panel .scene-product-row .scene-supplement { flex:1 1 0; min-width:0; max-width:260px; grid-template-columns:minmax(0,1fr); }
  .scene-panel .scene-primary .slot, .scene-panel .scene-supplement .slot { width:100%; min-height:0; aspect-ratio:1; border-radius:14px; }
  .scene-panel .scene-prompt { margin:0; }
  .scene-panel .scene-prompt-input { display:block; width:100%; min-height:44px; margin:0; padding:11px 52px 11px 14px; border:0; border-radius:0; background:transparent; box-shadow:none; outline:none; color:inherit; font:inherit; font-size:13px; line-height:1.45; }
  html[data-theme] .scene-panel .scene-prompt-input:focus,
  html[data-theme] .scene-panel .scene-prompt-input:focus-visible { border-color:transparent; outline:none; box-shadow:none; background:transparent; }
  html[data-theme="light"] .scene-panel .scene-prompt-input { color:#111; }
  html[data-theme="dark"] .scene-panel .scene-prompt-input { color:#f5f5f5; }
  .scene-panel .scene-prompt-count { position:absolute; right:12px; top:50%; transform:translateY(-50%); font-size:11px; color:var(--ink-dim); pointer-events:none; font-variant-numeric:tabular-nums; }
  .scene-panel .extras-hint { margin-top:7px; font-size:11.5px; }
  .uploads.extras { grid-template-columns:repeat(4,1fr); gap:9px; }
  .uploads.clothing-batch-grid { grid-template-columns:repeat(4,minmax(0,1fr)); gap:9px; }
  .c3d-lining-toggle-row { margin-top:10px; display:flex; align-items:center; }
  .c3d-lining-toggle { min-height:30px; display:inline-flex; align-items:center; gap:6px; padding:5px 10px; border:1px solid var(--glass-bd); border-radius:8px; background:var(--glass); color:var(--ink-soft); font:inherit; font-size:11px; font-weight:700; cursor:pointer; transition:border-color .2s var(--ease),background .2s var(--ease),color .2s var(--ease); }
  .c3d-lining-toggle:hover { border-color:var(--ink-dim); background:var(--glass-2); color:var(--ink); }
  .c3d-lining-toggle > span { font-size:15px; line-height:1; }
  .c3d-lining-toggle > small { color:var(--ink-dim); font-size:9.5px; font-weight:600; }
  .c3d-lining-section { margin-top:10px; padding-top:12px; border-top:1px solid var(--glass-bd); }
  .c3d-lining-section .field-label { margin-bottom:9px; }
  .uploads.c3d-lining-grid { grid-template-columns:repeat(4,minmax(0,1fr)); gap:9px; }
  .c3d-lining-slot { min-width:0; min-height:0; aspect-ratio:1; border-radius:13px; padding:8px; }
  .c3d-lining-slot .si { font-size:19px; margin-bottom:3px; }
  .c3d-lining-slot .sl { font-size:10.5px; }
  .c3d-lining-slot .sh { font-size:9px; }
  .clothing-official-preview-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:10px; width:min(100%,570px); }
  .clothing-official-heading { align-items:center; justify-content:flex-start; }
  .clothing-official-library-button { appearance:none; display:inline-flex; align-items:center; gap:6px; min-height:40px; padding:8px 11px; border:1.5px solid rgba(56,189,248,.62); border-radius:10px; background:rgba(56,189,248,.1); color:#f4f4fb; font:800 13px/1.2 inherit; cursor:pointer; box-shadow:0 5px 18px rgba(14,165,233,.12); transition:border-color .18s var(--ease),background .18s var(--ease),transform .18s var(--ease),box-shadow .18s var(--ease); }
  .clothing-official-library-button:hover { border-color:#7dd3fc; background:rgba(56,189,248,.18); transform:translateY(-1px); box-shadow:0 8px 24px rgba(14,165,233,.18); }
  .clothing-official-library-button em { padding:3px 6px; border-radius:6px; background:#0284c7; color:#fff; font-size:9px; font-style:normal; letter-spacing:.04em; }
  .clothing-official-preview-card { position:relative; min-width:0; aspect-ratio:1; overflow:hidden; padding:0; border:1.5px solid var(--glass-bd); border-radius:14px; background:#fff; cursor:pointer; transition:border-color .18s var(--ease),box-shadow .18s var(--ease),transform .18s var(--ease); }
  .clothing-official-preview-card:hover { border-color:var(--c3); transform:translateY(-2px); box-shadow:0 9px 24px rgba(0,0,0,.12); }
  .clothing-official-preview-card.selected { border-color:var(--c3); box-shadow:0 0 0 3px rgba(56,189,248,.2),0 9px 24px rgba(0,0,0,.12); }
  .clothing-official-preview-card img { position:absolute; inset:0; width:100%; height:100%; object-fit:contain; object-position:center; background:#fff; }
  .clothing-official-selected { position:absolute; right:7px; bottom:7px; z-index:2; padding:4px 8px; border-radius:999px; background:rgba(14,116,144,.9); color:#fff; font-size:10px; font-weight:850; box-shadow:0 3px 12px rgba(0,0,0,.2); }
  .clothing-official-preview-grid.is-loading .clothing-official-preview-card { cursor:default; border-color:var(--glass-bd); background:linear-gradient(110deg,var(--glass) 25%,var(--glass-2) 40%,var(--glass) 55%); background-size:220% 100%; animation:clothingOfficialShimmer 1.25s linear infinite; }
  @keyframes clothingOfficialShimmer { to { background-position-x:-220%; } }
  .uploads.style-primary-upload { grid-template-columns:minmax(180px,260px); justify-content:start; }
  .style-primary-upload .slot { width:100%; min-height:0; aspect-ratio:1; border-radius:14px; }
  .clothing-batch-slot { min-width:0; border-radius:13px; padding:8px; }
  .clothing-batch-slot .si { font-size:23px; margin-bottom:5px; }
  .clothing-batch-slot .sl { font-size:11.5px; }
  .clothing-batch-slot .sh { font-size:9.5px; }
  .clothing-batch-index { position:absolute; right:7px; bottom:7px; z-index:3; min-width:22px; height:22px; padding:0 6px; border-radius:999px; display:grid; place-items:center; background:rgba(0,0,0,.68); color:#fff; font-size:10.5px; font-weight:850; box-shadow:0 2px 8px rgba(0,0,0,.25); }
  .clothing-upload-count { margin-left:auto; color:var(--c3); font-size:11.5px; font-weight:750; white-space:nowrap; }
  .clothing-option-note { margin-left:auto; color:var(--ink-dim); font-size:10.5px; font-weight:600; }
  @container (max-width:430px){
    .uploads.clothing-batch-grid,.uploads.c3d-lining-grid,.uploads.dh-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }
  }
  .slot.mini { aspect-ratio:1; border-radius:12px; padding:6px; }
  .slot.mini .si-sm { font-size:19px; color:var(--ink-soft); margin-bottom:3px; line-height:1; }
  .slot.mini .sl-sm { font-size:11px; color:var(--ink-dim); font-weight:600; line-height:1.25; text-align:center; padding:0 6px; }
  .extras-hint { font-size:12px; color:var(--ink-dim); margin-top:9px; line-height:1.5; }
  /* 风格迁移:参考图槽左上角的序号角标(第 N 组任务 = 第 N 张参考图,与结果卡 groupIdx 对应) */
  .st-idx { position:absolute; top:6px; left:6px; min-width:20px; height:20px; padding:0 6px; border-radius:999px; background:rgba(0,0,0,.6); backdrop-filter:blur(6px); color:#fff; display:grid; place-items:center; font-size:11px; font-weight:800; z-index:2; }
  /* AI数字人：单层字段，不再套多层卡片。缩略图仍是「已上传 + 1 个添加」。 */
  .params:has(.dh-panel) .feat-head { margin-bottom:16px; }
  .params:has(.dh-panel) .feat-head p { font-size:13px; line-height:1.45; margin-top:6px; }
  .dh-panel .field { margin-bottom:16px; }
  .dh-panel .field-label { margin-bottom:8px; }
  .dh-panel .field-label em { color:var(--ink-dim); font-style:normal; font-weight:600; font-size:11.5px; }
  .dh-count { margin-left:auto; color:var(--ink-dim); font-weight:650; font-size:12px; }
  .dh-label-note { color:var(--ink-dim); font-size:11px; font-weight:600; }
  .dh-panel .field-label .dh-link-btn { margin-left:auto; }
  .uploads.dh-grid { grid-template-columns:repeat(4,minmax(0,1fr)); gap:9px; align-items:start; }
  .dh-ref-cell { min-width:0; }
  .dh-ref-cell .slot { width:100%; aspect-ratio:1; min-height:0; border-radius:13px; padding:8px; }
  .dh-ref-cell.selected .slot { border-color:var(--c1); box-shadow:0 0 0 2px rgba(139,92,246,.22); }
  .dh-set-primary { position:absolute; left:50%; bottom:6px; z-index:3; transform:translateX(-50%); min-width:64px; height:20px; padding:0 7px; border:0; border-radius:999px; background:rgba(255,255,255,.92); color:#171724; font:800 10px/1 inherit; cursor:pointer; white-space:nowrap; opacity:0; }
  .dh-ref-cell:hover .dh-set-primary { opacity:1; }
  .dh-set-primary:hover { background:#fff; color:var(--c1); }
  .dh-tag-editor { display:flex; align-items:flex-start; gap:8px; margin-top:10px; }
  .dh-tag-editor > span { flex:0 0 auto; padding-top:5px; color:var(--ink-dim); font-size:11.5px; font-weight:700; }
  .dh-take { display:flex; gap:5px; flex-wrap:wrap; }
  .dh-take .tk { font-size:11px; font-weight:600; padding:4px 9px; border-radius:999px; border:1px solid var(--glass-bd); color:var(--ink-dim); cursor:pointer; transition:all .15s; user-select:none; }
  .dh-take .tk:hover { color:var(--ink); border-color:rgba(255,255,255,.3); }
  .dh-take .tk.on { background:var(--grad-soft); color:var(--ink); border-color:transparent; box-shadow:inset 0 0 0 1px var(--c1); }
  .dh-primary-badge { position:absolute; left:6px; bottom:6px; z-index:3; min-width:22px; height:20px; display:grid; place-items:center; font-size:10px; font-weight:800; padding:0 7px; border-radius:999px; background:var(--grad-soft); color:var(--ink); box-shadow:inset 0 0 0 1px var(--c1); }
  .dh-analysis-state,.auto-analysis-state { position:absolute; top:6px; left:6px; z-index:3; max-width:98px; min-height:20px; padding:3px 7px; border:0; border-radius:999px; color:#fff; font-family:inherit; font-size:10px; font-weight:800; line-height:1.2; white-space:nowrap; box-shadow:0 3px 10px rgba(0,0,0,.2); pointer-events:none; }
  .dh-analysis-state.done { min-width:20px; width:20px; height:20px; padding:0; display:grid; place-items:center; }
  .dh-analysis-state.pending,.auto-analysis-state.pending,.auto-analysis-state.login { background:rgba(100,116,139,.92); }
  .dh-analysis-state.analyzing,.auto-analysis-state.analyzing { background:rgba(139,92,246,.94); animation:autoAnalysisPulse 1.15s ease-in-out infinite; }
  .dh-analysis-state.done,.auto-analysis-state.done { background:rgba(16,185,129,.92); }
  .dh-analysis-state.error,.auto-analysis-state.error { background:rgba(239,68,68,.92); }
  .auto-analysis-state.action { pointer-events:auto; cursor:pointer; }
  .auto-analysis-state.action:hover { filter:brightness(1.12); transform:translateY(-1px); }
  .auto-analysis-state.indexed { top:auto; bottom:6px; }
  .slot:has(.auto-analysis-state:not(.indexed)) .slot-fav { top:37px; }
  .dh-hint { font-size:11.5px; color:var(--ink-dim); margin-top:8px; line-height:1.5; }
  .dh-hint.warn { color:#fbbf24; }
  .dh-link-btn { padding:4px 9px; border:1px solid var(--glass-bd); border-radius:999px; background:rgba(255,255,255,.045); color:var(--ink-soft); font:600 11px/1.2 inherit; cursor:pointer; }
  .dh-link-btn:hover { border-color:var(--c1); color:var(--ink); }
  .dh-analyze-row { display:flex; align-items:center; gap:10px; margin-top:10px; }
  .dh-analyze-row span { color:var(--ink-dim); font-size:11px; line-height:1.4; }
  .dh-analyze-btn,.dh-mini-btn { border:1px solid rgba(139,92,246,.45); border-radius:9px; background:var(--grad-soft); color:var(--ink); padding:6px 10px; font:750 11.5px/1.2 inherit; cursor:pointer; }
  .dh-analyze-btn:disabled,.dh-mini-btn:disabled { opacity:.55; cursor:wait; }
  .dh-prompt-editor { position:relative; margin:0; }
  .dh-prompt-editor .prompt-box { min-height:52px; max-height:88px; margin:0; padding:11px 52px 11px 14px; resize:none; }
  .dh-prompt-count { position:absolute; right:12px; bottom:10px; font-size:11px; color:var(--ink-dim); pointer-events:none; font-variant-numeric:tabular-nums; }
  .dh-out-groups { display:grid; gap:10px; }
  .dh-out-group { display:grid; grid-template-columns:36px minmax(0,1fr); gap:8px; align-items:center; }
  .dh-out-group > span { color:var(--ink-dim); font-size:11.5px; font-weight:700; }
  .dh-out-group .pills { margin:0; }
  .auto-analysis-bar { display:flex; align-items:center; gap:9px; margin:10px 0 14px; padding:10px 12px; border:1px solid rgba(139,92,246,.26); border-radius:11px; background:rgba(139,92,246,.08); color:var(--ink-soft); font-size:11.5px; line-height:1.45; }
  .auto-analysis-dot { width:8px; height:8px; flex:0 0 8px; border-radius:50%; background:#94a3b8; box-shadow:0 0 0 4px rgba(148,163,184,.1); }
  .auto-analysis-bar.analyzing .auto-analysis-dot { background:#a78bfa; box-shadow:0 0 0 4px rgba(167,139,250,.14); animation:autoAnalysisPulse 1.15s ease-in-out infinite; }
  .auto-analysis-bar.done .auto-analysis-dot { background:#34d399; box-shadow:0 0 0 4px rgba(52,211,153,.12); }
  .auto-analysis-bar.error .auto-analysis-dot { background:#fbbf24; box-shadow:0 0 0 4px rgba(251,191,36,.12); }
  @keyframes autoAnalysisPulse { 50% { opacity:.38; transform:scale(.72); } }
  @media (prefers-reduced-motion:reduce) {
    .dh-analysis-state.analyzing,.auto-analysis-state.analyzing,.auto-analysis-dot { animation:none !important; }
  }
  .dh-quick-tags { display:flex; gap:6px; flex-wrap:wrap; margin-top:8px; }
  .dh-quick-tags button { padding:4px 8px; border:1px solid var(--glass-bd); border-radius:999px; background:transparent; color:var(--ink-dim); font:600 10.5px/1.2 inherit; cursor:pointer; }
  .dh-quick-tags button:hover { color:var(--ink); border-color:rgba(255,255,255,.28); }
  .dh-select-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:8px; }
  .dh-select-field { display:grid; gap:4px; color:var(--ink-dim); font-size:11px; font-weight:700; }
  .dh-select { width:100%; height:36px; padding:0 10px; border:1px solid var(--glass-bd); border-radius:10px; outline:none; background:#171724; color:var(--ink); font:650 12px/1 inherit; cursor:pointer; }
  .dh-select:hover,.dh-select:focus { border-color:var(--c1); }
  .dh-summary { display:flex; gap:6px; flex-wrap:wrap; }
  .dh-summary span { padding:4px 8px; border:1px solid var(--glass-bd); border-radius:999px; background:rgba(255,255,255,.035); color:var(--ink-soft); font-size:11px; }
  .dh-authorize { display:flex; align-items:center; gap:8px; margin-top:8px; color:#fbbf24; font-size:11.5px; font-weight:650; }
  @media (max-width:560px){
    .uploads.dh-grid,.dh-select-grid { grid-template-columns:1fr 1fr; }
    .dh-out-group { grid-template-columns:1fr; gap:6px; }
  }
  .pill .sw { display:inline-block; width:11px; height:11px; border-radius:50%; margin-right:6px; vertical-align:-1px; box-shadow:inset 0 0 0 1px rgba(0,0,0,.3); }
  .slot { border:2px dashed rgba(255,255,255,.16); border-radius:16px; aspect-ratio:1; display:grid; place-items:center;
    text-align:center; color:var(--ink-soft); cursor:pointer; transition:all .25s var(--ease); padding:14px; background:rgba(255,255,255,.02);
    overflow:hidden; position:relative; }
  .slot:hover { border-color:var(--c1); background:rgba(139,92,246,.07); }
  .slot.drag { border-color:var(--c1); background:rgba(139,92,246,.15); transform:scale(1.01); }
  /* 外部多图拖入：框内一叠卡片 + 张数，pointer-events 关闭以免打断 dragover/drop。 */
  .drop-stack { position:absolute; inset:0; z-index:6; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:4px; pointer-events:none; background:color-mix(in srgb,var(--bg,#fff) 72%,transparent); border-radius:inherit; animation:dropStackIn .16s ease-out; }
  .drop-stack-cards { position:relative; width:42%; aspect-ratio:3/4; margin-bottom:6px; }
  .drop-stack-cards i { position:absolute; inset:0; border-radius:8px; border:1.5px solid var(--c1); background:var(--bg-soft,#fff); box-shadow:0 4px 12px rgba(0,0,0,.12); transition:transform .2s var(--ease); }
  .drop-stack-cards i:nth-child(1) { transform:rotate(-10deg) translate(-8%,2%); opacity:.7; }
  .drop-stack-cards i:nth-child(2) { transform:rotate(6deg) translate(7%,1%); opacity:.85; }
  .drop-stack-cards i:nth-child(3) { transform:none; }
  .drop-stack-cards i:nth-child(3)::after { content:""; position:absolute; inset:22% 24%; border-radius:4px; background:color-mix(in srgb,var(--c1) 22%,transparent); }
  .drop-stack b { font-size:14px; font-weight:700; color:var(--ink,#302b27); line-height:1.2; }
  .drop-stack small { font-size:11px; color:var(--ink-soft,#736b64); line-height:1.2; }
  .drop-deal { position:fixed; inset:0; z-index:590; pointer-events:none; }
  .drop-deal-card { position:fixed; box-sizing:border-box; border-radius:14px; overflow:hidden; border:3px solid #fff; background:var(--bg-soft,#fff); box-shadow:0 10px 26px rgba(0,0,0,.22); transform-origin:0 0; will-change:transform,opacity; }
  .drop-deal-card img { display:block; width:100%; height:100%; object-fit:cover; }
  .drop-deal-count { position:fixed; transform:translate(-100%,0); min-width:44px; padding:4px 10px; border-radius:999px; background:var(--c1); color:#fff; font-size:13px; font-weight:700; text-align:center; box-shadow:0 4px 12px rgba(0,0,0,.2); }
  @keyframes dropStackIn { from { opacity:0; transform:scale(.96); } to { opacity:1; transform:none; } }
  @media (prefers-reduced-motion:reduce) { .drop-stack { animation:none; } }
  .slot.has-img { border-style:solid; border-color:var(--glass-bd); padding:0; background:var(--slot-preview-matte); }
  .slot.has-img:hover, .slot.has-img.drag { background:var(--slot-preview-matte); }
  .slot-mask { position:absolute; inset:0; z-index:1; display:grid; place-items:center; background:rgba(0,0,0,.45); color:#fff; font-size:13px; font-weight:600; opacity:0; pointer-events:none; transition:opacity .2s; }
  .slot.has-img:hover .slot-mask { opacity:1; }
  .slot-del { position:absolute; top:8px; right:8px; width:26px; height:26px; border-radius:50%; background:rgba(0,0,0,.55); backdrop-filter:blur(6px); color:#fff; display:grid; place-items:center; font-size:12px; cursor:pointer; opacity:0; transition:all .2s; z-index:2; }
  .slot.has-img:hover .slot-del { opacity:1; }
  .slot-del:hover { background:#ef4444; }
  /* 收藏：与「更换」同款的文字小标签（原 ⭐ 表情只隐藏不显示）。 */
  .slot-fav { position:absolute; top:8px; left:8px; box-sizing:border-box; padding:3px 6px; border-radius:6px; background:rgba(24,19,15,.74); backdrop-filter:blur(6px); color:#fff; display:block; font-size:0; line-height:1.15; white-space:nowrap; cursor:pointer; opacity:0; transition:opacity .2s,background .2s; z-index:2; box-shadow:0 1px 3px rgba(0,0,0,.25); }
  .slot-fav::before { content:"收藏"; font-size:11px; font-weight:600; }
  .slot.has-img:hover .slot-fav { opacity:1; }
  .slot-fav:hover { background:#b8481f; }
  .slot-sync { position:absolute; bottom:8px; right:8px; box-sizing:border-box; height:26px; padding:0 9px; border-radius:999px; background:rgba(0,0,0,.55); backdrop-filter:blur(6px); color:#fff; display:flex; align-items:center; gap:4px; font-family:inherit; font-size:11px; font-weight:600; line-height:1; cursor:pointer; opacity:0; transition:all .2s; z-index:2; white-space:nowrap; }
  .slot.has-img .slot-sync { opacity:1; }
  .slot.has-img:hover .slot-sync { opacity:1; }
  .slot-sync:hover { background:rgba(139,92,246,.75); }
  .slot-local-edit { position:absolute; left:8px; right:auto; bottom:8px; z-index:4; box-sizing:border-box; width:auto; max-width:calc(100% - 50px); height:26px; min-height:0; padding:0 9px; border:1px solid rgba(255,255,255,.34); border-radius:999px; background:rgba(76,29,149,.86); color:#fff; box-shadow:0 3px 10px rgba(38,18,70,.22); font-family:inherit; font-size:11px; font-weight:600; line-height:1; white-space:nowrap; cursor:pointer; opacity:0; backdrop-filter:blur(7px); transition:opacity .2s,background .16s,transform .16s; }
  .slot.has-img:hover .slot-local-edit { opacity:.94; }
  .slot-local-edit:hover { background:#6d28d9; transform:translateY(-1px); }
  .slot-local-edit.active { background:rgba(109,40,217,.94); border-color:#c4b5fd; }
  .slot.has-local-edit .slot-sync { right:8px; bottom:8px; }
  /* 更换图片：统一为「更换」文字小标签（原 🔄 表情只留给读屏的 title），与套图五项的框内按钮同款。 */
  .slot-repl { position:absolute; bottom:8px; left:8px; box-sizing:border-box; padding:3px 6px; border-radius:6px; background:rgba(24,19,15,.74); backdrop-filter:blur(6px); color:#fff; display:block; font-size:0; line-height:1.15; white-space:nowrap; cursor:pointer; opacity:0; transition:opacity .2s,background .2s; z-index:2; box-shadow:0 1px 3px rgba(0,0,0,.25); }
  .slot-repl::before { content:"更换"; font-size:11px; font-weight:600; letter-spacing:0; }
  .slot.has-img:hover .slot-repl { opacity:1; }
  .slot-repl:hover { background:#b8481f; }
  .fav-modal { width:100%; max-width:520px; max-height:80vh; overflow-y:auto; background:var(--bg-soft); border:1px solid var(--glass-bd); border-radius:24px; padding:28px; }
  .fav-grid { display:grid; grid-template-columns:repeat(4,1fr); gap:10px; margin-top:16px; }
  .fav-item { position:relative; aspect-ratio:1; border-radius:12px; overflow:hidden; cursor:pointer; border:1px solid var(--glass-bd); transition:all .2s; }
  .fav-item:hover { border-color:var(--c1); transform:translateY(-2px); }
  .fav-item img { width:100%; height:100%; object-fit:cover; }
  .fav-del { position:absolute; top:4px; right:4px; width:20px; height:20px; border-radius:50%; background:rgba(0,0,0,.6); color:#fff; display:grid; place-items:center; font-size:10px; opacity:0; transition:opacity .2s; }
  .fav-item:hover .fav-del { opacity:1; }
  .fav-del:hover { background:#ef4444; }
  .fav-empty { font-size:13px; color:var(--ink-dim); text-align:center; padding:30px 10px; }
  /* 正背面模板必须成对同行：所有断点都使用偶数列，避免一组被拆到上下两行。 */
  .official-reference-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }
  .official-reference-categories { display:flex; gap:8px; flex-wrap:wrap; margin-top:14px; }
  .official-reference-category { appearance:none; border:1px solid var(--glass-bd); border-radius:999px; padding:8px 14px; background:var(--glass); color:var(--ink-dim); font:inherit; font-size:12.5px; font-weight:700; cursor:pointer; }
  .official-reference-category span { margin-left:4px; opacity:.68; }
  .official-reference-category:hover { color:var(--ink); border-color:rgba(56,189,248,.42); }
  .official-reference-category.active { color:#fff; border-color:transparent; background:linear-gradient(135deg,var(--c1),var(--c2)); box-shadow:0 8px 24px rgba(59,130,246,.2); }
  .official-reference-subcategories { display:flex; gap:7px; flex-wrap:wrap; margin-top:10px; }
  .official-reference-subcategory { appearance:none; border:1px solid var(--glass-bd); border-radius:999px; padding:6px 11px; background:transparent; color:var(--ink-dim); font:inherit; font-size:11.5px; font-weight:700; cursor:pointer; }
  .official-reference-subcategory span { margin-left:3px; opacity:.65; }
  .official-reference-subcategory:hover { color:var(--ink); border-color:rgba(56,189,248,.42); }
  .official-reference-subcategory.active { color:var(--ink); border-color:rgba(56,189,248,.56); background:rgba(56,189,248,.1); box-shadow:inset 0 0 0 1px rgba(56,189,248,.12); }
  .official-reference-item { appearance:none; padding:0; aspect-ratio:4/5; background:#fff; color:inherit; text-align:left; }
  .official-reference-item img { object-fit:contain; object-position:center; background:#fff; }
  .official-reference-badge { position:absolute; top:7px; left:7px; padding:3px 7px; border-radius:999px; background:linear-gradient(135deg,var(--c1),var(--c2)); color:#fff; font-size:10px; font-weight:800; box-shadow:0 4px 14px rgba(139,92,246,.35); }
  .official-reference-copy { position:absolute; left:0; right:0; bottom:0; display:flex; flex-direction:column; gap:1px; padding:20px 9px 8px; background:linear-gradient(transparent,rgba(4,4,12,.92)); color:#fff; }
  .official-reference-copy b { font-size:12px; line-height:1.25; }
  .official-reference-copy small { font-size:9.5px; line-height:1.3; color:rgba(255,255,255,.72); }
  /* 挂拍、测试版和 3D 的模板名称放在独立说明栏，避免文字随衣物明暗变化而无法辨认。 */
  #favModal .official-clothing-reference-grid .official-reference-item { display:grid; grid-template-rows:minmax(0,1fr) auto; }
  #favModal .official-clothing-reference-grid .official-reference-item img { min-width:0; min-height:0; object-fit:contain; object-position:center; }
  #favModal .official-clothing-reference-grid .official-reference-copy { position:static; min-height:44px; box-sizing:border-box; justify-content:center; padding:7px 10px; border-top:1px solid #e5e7eb; background:#fff; color:#171717; }
  #favModal .official-clothing-reference-grid .official-reference-copy b { display:-webkit-box; overflow:hidden; color:#171717; font-size:12px; line-height:1.3; -webkit-box-orient:vertical; -webkit-line-clamp:2; }
  /* 官方图库在桌面横屏中使用宽幅面板，筛选与图库各自保持稳定，不再变成细长的整页滚动区。 */
  @media (orientation:landscape) and (min-width:700px) {
    #favModal.official-library-mode .fav-modal { position:relative; width:min(1680px,calc(100vw - 48px)); height:min(760px,calc(100vh - 32px)); max-width:none; max-height:calc(100vh - 32px); display:flex; flex-direction:column; overflow:hidden; padding:28px; box-shadow:0 40px 100px rgba(0,0,0,.32); }
    #favModal.official-library-mode #favTabs { display:none; }
    #favModal.official-library-mode #favSubText { flex:0 0 auto; max-width:calc(100% - 72px); margin-top:10px !important; line-height:1.6; }
    #favModal.official-library-mode #favBody { min-height:0; flex:1 1 auto; display:grid; grid-template-columns:minmax(0,1fr); grid-template-rows:auto auto minmax(0,1fr); }
    #favModal.official-library-mode .official-reference-categories { grid-column:1; grid-row:1; flex-wrap:wrap; margin-top:14px; }
    #favModal .official-reference-category { padding:10px 17px; font-size:14px; }
    #favModal.official-library-mode .official-reference-subcategories { grid-column:1; grid-row:2; flex-wrap:wrap; margin:10px 0 0; }
    #favModal .official-reference-subcategory { padding:8px 14px; font-size:12.5px; }
    #favModal.official-library-mode .official-reference-grid { grid-column:1; grid-row:3; min-height:0; grid-template-columns:repeat(4,minmax(0,1fr)); grid-auto-rows:max-content; align-content:start; align-items:start; gap:14px; margin-top:14px; padding:2px 5px 10px 2px; overflow-y:auto; overscroll-behavior:contain; scrollbar-gutter:stable; }
    #favModal.official-library-mode .official-reference-item { width:100%; height:auto; align-self:start; }
    #favModal .official-reference-badge { top:9px; left:9px; padding:4px 9px; font-size:11px; }
    #favModal .official-reference-copy { padding:28px 12px 10px; }
    #favModal .official-clothing-reference-grid .official-reference-copy { min-height:50px; padding:8px 12px; }
    #favModal .official-reference-copy b { font-size:14px; }
    #favModal .official-reference-copy small { font-size:11px; }
    #favModal.official-library-mode .fav-modal > .pm-close { position:absolute; top:20px; right:24px; z-index:2; margin:0 !important; padding:7px 12px; border:1px solid var(--glass-bd); border-radius:999px; background:var(--glass); }
  }
  @media (orientation:landscape) and (min-width:1180px) {
    #favModal.official-library-mode .official-reference-grid { grid-template-columns:repeat(6,minmax(0,1fr)); }
  }
  @media (orientation:landscape) and (min-width:1540px) {
    #favModal.official-library-mode .official-reference-grid { grid-template-columns:repeat(8,minmax(0,1fr)); }
  }
  /* 模特用于看清脸、发型和发色：独立大卡片，不改变服装参考图的正背面配对列数。 */
  #favModal.official-model-library-mode .fav-modal { position:relative; width:min(1680px,calc(100vw - 32px)); max-width:none; height:min(880px,calc(100dvh - 32px)); max-height:calc(100dvh - 32px); display:flex; flex-direction:column; overflow:hidden; padding:24px; }
  #favModal.official-model-library-mode #favTabs { display:none; }
  #favModal.official-model-library-mode h3 { max-width:calc(100% - 80px); }
  #favModal.official-model-library-mode #favSubText { flex:none; max-width:calc(100% - 64px); line-height:1.6; }
  #favModal.official-model-library-mode #favBody { min-height:0; flex:1; display:grid; grid-template-columns:minmax(0,1fr); grid-template-rows:auto auto minmax(0,1fr); }
  #favModal.official-model-library-mode .official-reference-categories { grid-row:1; flex-wrap:wrap; }
  #favModal.official-model-library-mode .official-reference-subcategories { grid-row:2; }
  #favModal.official-model-library-mode .official-model-reference-grid { grid-row:3; min-height:0; grid-template-columns:minmax(0,1fr); grid-auto-rows:max-content; align-content:start; gap:18px; padding:2px 5px 10px 2px; overflow-y:auto; overscroll-behavior:contain; scrollbar-gutter:stable; }
  #favModal.official-model-library-mode .official-reference-item { width:100%; height:auto; align-self:start; }
  #favModal .official-model-reference-grid img { object-fit:cover; object-position:center top; }
  #favModal.official-model-library-mode .official-reference-copy { padding:30px 14px 12px; }
  #favModal.official-model-library-mode .official-reference-copy b { font-size:15px; }
  #favModal.official-model-library-mode .official-reference-copy small { font-size:12px; }
  #favModal.official-model-library-mode .fav-modal>.pm-close { position:absolute; top:20px; right:24px; z-index:2; margin:0!important; padding:7px 12px; border:1px solid var(--glass-bd); border-radius:999px; background:var(--glass); }
  @media(min-width:600px) { #favModal.official-model-library-mode .official-model-reference-grid { grid-template-columns:repeat(2,minmax(0,1fr)); } }
  @media(min-width:1050px) { #favModal.official-model-library-mode .official-model-reference-grid { grid-template-columns:repeat(3,minmax(0,1fr)); } }
  @media(min-width:1450px) { #favModal.official-model-library-mode .official-model-reference-grid { grid-template-columns:repeat(4,minmax(0,1fr)); } }
  /* 预览图必须 absolute 铺满 slot：img 作为 grid 子项时行高是 auto，height:100% 会按原比例撑高，
     再被 overflow:hidden 裁掉。contain + 居中 = 方槽内完整显示；竖图左右留白、横图上下留白。
     留白底只打在 img / .has-img 上，空槽保持原虚线空态。发送仍是原图。 */
  .slot img { position:absolute; inset:0; width:100%; height:100%; object-fit:contain; object-position:center; background:var(--slot-preview-matte); }
  .slot .si { font-size:30px; margin-bottom:8px; filter:drop-shadow(0 0 12px rgba(139,92,246,.5)); }
  .slot .sl { font-weight:700; color:var(--ink); font-size:13.5px; }
  .slot .sh { font-size:11.5px; margin-top:3px; color:var(--ink-dim); }

  .pills { display:flex; gap:9px; flex-wrap:wrap; }
  .pill { font-size:13px; font-weight:600; padding:9px 16px; border-radius:11px; border:1px solid var(--glass-bd);
    background:var(--glass); color:var(--ink-soft); cursor:pointer; transition:all .2s var(--ease); }
  .pill:hover { color:var(--ink); border-color:rgba(255,255,255,.25); }
  .pill.active { background:var(--grad-soft); color:var(--ink); border-color:transparent; box-shadow:inset 0 0 0 1.5px var(--c1); }

  /* 生成参数直接呈现为按钮条；点击后横向浮出选项，不占页面布局高度。 */
  .dc-generation-buttons { display:flex; flex-wrap:wrap; gap:8px; align-items:center; margin-bottom:24px; }
  .dc-setting-button { min-width:0; position:relative; }
  .dc-setting-button-trigger { min-width:0; min-height:42px; display:flex; align-items:center; gap:6px; padding:8px 11px;
    border:1px solid var(--glass-bd); border-radius:11px; background:rgba(255,255,255,.04); color:var(--ink); cursor:pointer;
    font:inherit; transition:border-color .2s,background .2s,box-shadow .2s,transform .2s; }
  .dc-setting-button-trigger:hover { border-color:rgba(255,255,255,.25); background:rgba(255,255,255,.065); transform:translateY(-1px); }
  .dc-setting-button.open .dc-setting-button-trigger, .dc-setting-button-trigger:focus-visible { border-color:rgba(139,92,246,.72); box-shadow:0 0 0 3px rgba(139,92,246,.13); }
  .dc-setting-button-name { color:var(--ink-dim); font-size:10.5px; font-weight:700; white-space:nowrap; }
  .dc-setting-button-value { min-width:0; max-width:170px; overflow:hidden; text-overflow:ellipsis; color:var(--ink); font-size:12.5px; font-weight:750; white-space:nowrap; }
  .dc-setting-button-caret { color:var(--ink-dim); font-size:12px; line-height:1; }
  .dc-setting-menu { position:absolute; left:0; top:calc(100% + 8px); bottom:auto; z-index:55; width:max-content; max-width:390px; display:flex; flex-wrap:wrap; gap:5px;
    padding:6px; border:1px solid var(--glass-bd); border-radius:10px; background:#151522; box-shadow:0 14px 34px rgba(0,0,0,.42);
    opacity:0; visibility:hidden; pointer-events:none; transform:translateY(5px); transition:opacity .16s,transform .16s,visibility .16s; }
  .dc-setting-menu-wide .dc-setting-menu { width:390px; }
  .dc-setting-button.open .dc-setting-menu { opacity:1; visibility:visible; pointer-events:auto; transform:none; }
  .dc-setting-option { min-height:32px; padding:6px 9px; border:1px solid var(--glass-bd); border-radius:8px; background:rgba(255,255,255,.045);
    color:var(--ink-soft); font:650 12px/1 inherit; white-space:nowrap; cursor:pointer; transition:border-color .16s,background .16s,color .16s; }
  .dc-setting-option:hover { color:var(--ink); border-color:rgba(255,255,255,.25); background:rgba(255,255,255,.075); }
  .dc-setting-option.active { color:var(--ink); border-color:rgba(139,92,246,.7); background:var(--grad-soft); box-shadow:inset 0 0 0 1px rgba(139,92,246,.25); }
  @container (max-width:460px){
    .dc-generation-buttons { gap:7px; }
    .dc-setting-button-trigger { min-height:40px; padding:7px 10px; }
    .dc-setting-button-value { max-width:125px; }
    .dc-setting-menu { left:0; right:auto; width:max-content; max-width:calc(100cqw - 40px); }
    .dc-setting-menu-wide .dc-setting-menu { width:calc(100cqw - 40px); }
  }

  /* 模特换衣·我有模特图：四个换装类型已放到顶栏「模特换装」下拉。 */
  .hzg-task-card { border:1px solid var(--glass-bd); border-radius:16px; padding:14px; background:rgba(255,255,255,.025); }
  .hzg-task-card > .field-label { margin-bottom:12px; }
  .hzg-task-list { display:grid; gap:4px; margin:0 0 6px; }
  .hzg-task-list > .field.hzg-task-card {
    margin:0; padding:10px 0 12px; border:0; border-radius:0; background:transparent; box-shadow:none;
  }
  .hzg-task-list > .hzg-task-card > .field-label { margin-bottom:8px; }
  .hzg-task-actions { margin-left:auto; display:flex; gap:8px; align-items:center; }
  .hzg-task-remove {
    appearance:none; box-sizing:border-box; flex:0 0 auto; display:inline-flex; align-items:center; justify-content:center; gap:5px;
    min-height:32px; padding:0 10px 0 8px; border:1px solid var(--glass-bd); border-radius:9px;
    background:rgba(255,255,255,.045); color:var(--ink-soft); cursor:pointer;
    font:700 12px/1 inherit; letter-spacing:.02em;
    transition:border-color .16s var(--ease),background .16s var(--ease),color .16s var(--ease),transform .16s var(--ease),box-shadow .16s var(--ease);
  }
  .hzg-task-remove svg { width:11px; height:11px; display:block; }
  .hzg-task-remove path { fill:none; stroke:currentColor; stroke-width:1.7; stroke-linecap:round; }
  .hzg-task-remove:hover {
    color:#fff; border-color:rgba(239,68,68,.62); background:#ef4444;
    box-shadow:0 6px 16px rgba(239,68,68,.28); transform:translateY(-1px);
  }
  .hzg-task-remove:active { transform:translateY(0) scale(.98); box-shadow:none; }
  .hzg-task-list .hzg-extra-row { margin-top:7px; }
  .hzg-task-list .hzg-group-note { display:flex; gap:8px; align-items:center; margin-top:8px; }
  .hzg-task-list .hzg-group-note.fc-group-note { flex-direction:column; flex-wrap:nowrap; align-items:stretch; gap:8px; }
  .fc-preset-card {
    margin:0 0 14px; padding:11px 13px 10px; border:1px solid var(--glass-bd); border-radius:16px;
    background:linear-gradient(180deg,rgba(255,255,255,.04),rgba(255,255,255,.015));
  }
  .fc-preset-head { display:flex; align-items:center; justify-content:space-between; gap:10px; margin-bottom:6px; }
  .fc-preset-head b { font-size:13px; font-weight:800; color:var(--ink); letter-spacing:.01em; }
  .fc-preset-head small { margin-left:8px; color:var(--ink-dim); font-size:11px; font-weight:600; }
  .fc-preset-empty { color:var(--ink-dim); font-size:12px; line-height:1.55; }
  .fc-note-field { position:relative; width:100%; min-width:0; }
  .fc-note-field.brief-prompt-editor { margin-top:0; }
  .brief-prompt-editor .fc-prompt-input {
    appearance:none; -webkit-appearance:none;
    display:block; width:100%; box-sizing:border-box; min-height:108px; max-height:42vh; resize:none;
    margin:0; padding:15px 16px 39px; border:0; border-radius:0; outline:none; box-shadow:none;
    background:transparent; color:inherit; font-family:inherit; font-size:13.5px; font-weight:500; line-height:1.55;
    overflow:auto; white-space:pre-wrap; word-break:break-word;
  }
  html[data-theme] .brief-prompt-editor .fc-prompt-input:focus,
  html[data-theme] .brief-prompt-editor .fc-prompt-input:focus-visible {
    border:0; outline:none; box-shadow:none; background:transparent;
  }
  .fc-prompt-count { font-variant-numeric:tabular-nums; }
  .fc-note-actions { display:flex; flex:0 0 auto; gap:6px; align-items:center; justify-content:flex-end; }
  .fc-note-btn {
    appearance:none; box-sizing:border-box; min-height:34px; padding:0 11px; border-radius:10px;
    border:1px solid var(--glass-bd); background:rgba(255,255,255,.04); color:var(--ink-soft);
    font:700 12px/1 inherit; cursor:pointer; white-space:nowrap;
    transition:border-color .16s var(--ease), background .16s var(--ease), color .16s var(--ease);
  }
  .fc-note-btn:hover, .fc-note-btn.picker-open { color:var(--ink); border-color:rgba(139,92,246,.5); background:rgba(139,92,246,.12); }
  .fc-note-btn.fc-note-sync {
    background:linear-gradient(135deg,rgba(139,92,246,.2),rgba(236,72,153,.2));
    border-color:rgba(139,92,246,.4); color:var(--ink);
  }
  .fc-preset-picker {
    position:fixed; z-index:540; display:none; width:min(420px,calc(100vw - 24px)); max-height:min(70vh,calc(100vh - 24px));
    overflow:hidden; border:1px solid var(--glass-bd); border-radius:16px; background:var(--bg-soft);
    box-shadow:0 24px 70px rgba(0,0,0,.38); padding:12px;
  }
  .fc-preset-picker.show { display:flex; flex-direction:column; gap:8px; }
  .fc-preset-pick-head { display:flex; align-items:baseline; justify-content:space-between; gap:8px; }
  .fc-preset-pick-head b { font-size:13px; color:var(--ink); }
  .fc-preset-pick-head span { font-size:11px; color:var(--ink-dim); }
  .fc-preset-search {
    width:100%; box-sizing:border-box; min-height:34px; padding:0 11px; border-radius:10px;
    border:1px solid var(--glass-bd); background:rgba(255,255,255,.03); color:var(--ink);
    font:500 12.5px/1 inherit; outline:none;
  }
  .fc-preset-search:focus { border-color:#8b5cf6; box-shadow:0 0 0 3px rgba(139,92,246,.12); }
  .fc-preset-pick-list { overflow:auto; display:grid; gap:6px; min-height:0; }
  .fc-preset-pick {
    display:grid; grid-template-columns:minmax(0,1fr) auto; gap:0;
    border:1px solid var(--glass-bd); border-radius:12px; background:rgba(255,255,255,.03); overflow:hidden;
  }
  .fc-preset-pick-main {
    appearance:none; min-width:0; text-align:left; padding:9px 11px; border:0; background:transparent;
    color:inherit; cursor:pointer; display:grid; gap:4px;
  }
  .fc-preset-pick-main b { font-size:12.5px; color:var(--ink); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .fc-preset-pick-main small { font-size:11.5px; color:var(--ink-dim); line-height:1.5; display:-webkit-box; -webkit-line-clamp:4; -webkit-box-orient:vertical; overflow:hidden; white-space:pre-wrap; }
  .fc-preset-pick:hover { border-color:rgba(139,92,246,.45); background:rgba(139,92,246,.08); }
  .fc-preset-pick-ops { display:flex; flex-direction:column; }
  .fc-preset-pick-ops button {
    appearance:none; flex:1; min-width:44px; border:0; border-left:1px solid var(--glass-bd);
    background:transparent; color:var(--ink-dim); font:650 11px/1 inherit; cursor:pointer; padding:0 8px;
  }
  .fc-preset-pick-ops button:hover { color:var(--ink); background:rgba(255,255,255,.05); }
  .fc-preset-full {
    grid-column:1 / -1; margin:0; max-height:220px; overflow:auto; padding:8px 12px 11px;
    border-top:1px solid var(--glass-bd); background:rgba(0,0,0,.12); color:var(--ink-soft);
    font:500 12.5px/1.6 inherit; white-space:pre-wrap; word-break:break-word;
  }
  .fc-preset-dialog { max-width:420px; }
  .fc-preset-label { display:block; margin-bottom:6px; font-size:12px; font-weight:700; color:var(--ink-soft); }
  .fc-preset-name {
    width:100%; box-sizing:border-box; min-height:42px; padding:0 13px; border-radius:12px;
    border:1px solid var(--glass-bd); background:rgba(255,255,255,.03); color:var(--ink);
    font:600 14px/1 inherit; outline:none;
  }
  .fc-preset-name:focus { border-color:#8b5cf6; box-shadow:0 0 0 3px rgba(139,92,246,.12); }
  .fc-preset-preview {
    margin-top:10px; max-height:120px; overflow:auto; padding:10px 12px; border-radius:12px;
    background:rgba(255,255,255,.03); color:var(--ink-soft); font-size:12.5px; line-height:1.55; white-space:pre-wrap;
  }
  .fc-preset-foot { display:flex; justify-content:flex-end; gap:8px; margin-top:16px; }
  .fc-preset-ghost, .fc-preset-primary {
    appearance:none; min-height:38px; padding:0 16px; border-radius:11px; font:700 13px/1 inherit; cursor:pointer;
  }
  .fc-preset-ghost { border:1px solid var(--glass-bd); background:transparent; color:var(--ink-soft); }
  .fc-preset-primary { border:1px solid transparent; background:linear-gradient(135deg,#7c3aed,#6d28d9); color:#fff; }
  .fc-preset-ghost:hover { color:var(--ink); border-color:rgba(255,255,255,.28); }
  .fc-preset-primary:hover { filter:brightness(1.06); }
  html[data-theme="light"] .fc-preset-card { background:linear-gradient(180deg,#fbfaff,#f6f3fb); }
  html[data-theme="light"] .fc-note-btn,
  html[data-theme="light"] .fc-preset-picker,
  html[data-theme="light"] .fc-preset-search,
  html[data-theme="light"] .fc-preset-name { background:#fff; }
  html[data-theme="light"] .fc-preset-pick { background:#fff; }
  html[data-theme="light"] .fc-preset-full { background:#f6f3fb; }
  .hzg-local-edit-modal { z-index:520; }
  .hzg-local-edit-dialog { width:min(980px,calc(100vw - 36px)); max-height:calc(100vh - 36px); overflow:auto; padding:18px; border:1px solid rgba(255,255,255,.1); border-radius:20px; background:#17171b; box-shadow:0 28px 90px rgba(0,0,0,.45); display:grid; gap:14px; }
  .hzg-local-edit-head,.hzg-local-edit-foot { display:flex; align-items:center; justify-content:space-between; gap:18px; }
  .hzg-local-edit-head > div { display:grid; gap:4px; }
  .hzg-local-edit-head b { color:#f3f3f5; font-size:16px; }
  .hzg-local-edit-head span,.hzg-local-edit-foot > span { color:#8d8d96; font-size:12px; line-height:1.5; }
  .hzg-local-edit-head button,.hzg-local-edit-foot button { min-height:38px; padding:0 15px; border:1px solid rgba(255,255,255,.13); border-radius:10px; background:#27272c; color:#dedee3; font:650 12.5px/1 inherit; cursor:pointer; }
  .hzg-local-edit-foot > div { display:flex; gap:8px; flex-shrink:0; }
  .hzg-local-edit-foot button.primary { border-color:#7c3aed; background:#6d28d9; color:#fff; }
  .hzg-local-edit-foot button:hover { border-color:rgba(255,255,255,.3); }
  .hzg-local-edit-foot button.primary:hover { background:#7c3aed; }
  .hzg-local-edit-foot button:disabled { opacity:.38; cursor:not-allowed; }
  .hzg-local-edit-dialog .zy-local-stage { min-height:360px; }
  .hzg-local-edit-dialog .zy-local-image-wrap > img { max-height:min(68vh,680px); }
  .source-pre-edit-prompt { display:grid; gap:7px; }
  .source-pre-edit-prompt label { color:#dedee3; font-size:12px; font-weight:700; }
  .source-pre-edit-prompt textarea { box-sizing:border-box; width:100%; min-height:76px; resize:vertical; padding:11px 13px; border:1px solid rgba(255,255,255,.13); border-radius:11px; background:#222227; color:#f3f3f5; font-family:inherit; font-size:13px; font-weight:500; line-height:1.55; outline:none; }
  .source-pre-edit-prompt textarea:focus { border-color:#8b5cf6; box-shadow:0 0 0 3px rgba(139,92,246,.12); }
  .source-pre-edit-error { padding:10px 12px; border:1px solid rgba(248,113,113,.34); border-radius:10px; background:rgba(127,29,29,.18); color:#fca5a5; font-size:12px; line-height:1.5; }
  html[data-theme="light"] .hzg-local-edit-dialog { border-color:#ded9e6; background:#fff; box-shadow:0 28px 90px rgba(45,36,60,.22); }
  html[data-theme="light"] .hzg-local-edit-head b { color:#201b27; }
  html[data-theme="light"] .hzg-local-edit-head span,html[data-theme="light"] .hzg-local-edit-foot > span { color:#817b8d; }
  html[data-theme="light"] .hzg-local-edit-dialog .zy-local-stage { background:#fff; border-color:#e2dee8; }
  html[data-theme="light"] .hzg-local-edit-head button,html[data-theme="light"] .hzg-local-edit-foot button { background:#fff; border-color:#d8d2df; color:#443d50; }
  html[data-theme="light"] .hzg-local-edit-foot button.primary { border-color:#7c3aed; background:#6d28d9; color:#fff; }
  html[data-theme="light"] .source-pre-edit-prompt label { color:#443d50; }
  html[data-theme="light"] .source-pre-edit-prompt textarea { border-color:#d8d2df; background:#fff; color:#201b27; }
  @media (max-width:768px){
    .hzg-local-edit-dialog { width:calc(100vw - 20px); max-height:calc(100vh - 20px); padding:12px; border-radius:15px; }
    .hzg-local-edit-head,.hzg-local-edit-foot { align-items:flex-start; }
    .hzg-local-edit-head span,.hzg-local-edit-foot > span { display:none; }
    .hzg-local-edit-dialog .zy-local-stage { min-height:280px; padding:8px; }
  }
  .jw-style-task-card.field { margin-bottom:14px; padding:13px 15px 14px; border-radius:18px; }
  .jw-style-task-card > .field-label { margin-bottom:10px; }
  .jw-style-task-card .uploads.extras.hzg-upload-grid { grid-template-columns:repeat(2,minmax(0,126px)); gap:8px; justify-content:start; }
  .jw-style-task-card .slot { width:100%; min-height:0; padding:5px; border-radius:12px; }
  .jw-style-prompt-wrap { position:relative; margin-top:10px; }
  .jw-style-prompt-input { width:100%; height:42px; box-sizing:border-box; padding:0 54px 0 13px; border:1px solid var(--glass-bd); border-radius:11px; outline:none; background:rgba(255,255,255,.03); color:var(--ink); font:600 12.5px/1 inherit; }
  .jw-style-prompt-input::placeholder { color:var(--ink-dim); font-weight:500; }
  .jw-style-prompt-input:hover,.jw-style-prompt-input:focus { border-color:rgba(139,92,246,.7); box-shadow:0 0 0 3px rgba(139,92,246,.09); }
  .jw-style-prompt-count { position:absolute; right:13px; top:50%; transform:translateY(-50%); color:var(--ink-dim); font-size:11px; font-variant-numeric:tabular-nums; pointer-events:none; }
  .jw-style-summary-hint { margin-bottom:18px; }
  .hzg-type-selector { border:1px solid var(--glass-bd); border-radius:18px; padding:16px; background:rgba(255,255,255,.035);
    box-shadow:0 12px 34px rgba(0,0,0,.12); }
  .hzg-combo-head { display:flex; align-items:center; justify-content:space-between; gap:12px; margin-bottom:12px; }
  .hzg-combo-head span { color:var(--ink); font-size:14px; font-weight:800; }
  .hzg-combo-head small { color:var(--ink-dim); font-size:11.5px; font-weight:500; text-align:right; }
  .hzg-combo-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:10px; }
  .hzg-combo { min-width:0; min-height:42px; padding:8px 10px; border:1px solid var(--glass-bd); border-radius:12px;
    background:rgba(255,255,255,.035); color:var(--ink-soft); font:inherit; font-size:13px; font-weight:700; cursor:pointer; transition:all .2s var(--ease); }
  .hzg-combo span { font:inherit; white-space:nowrap; }
  .hzg-combo:hover { color:var(--ink); border-color:rgba(255,255,255,.25); }
  .hzg-combo.active { color:#fff; border-color:transparent; background:var(--grad); box-shadow:0 8px 22px rgba(139,92,246,.24); }
  .uploads.extras.hzg-upload-grid { grid-template-columns:repeat(4,minmax(0,1fr)); align-items:start; }
  .hzg-extra-row { display:flex; align-items:center; justify-content:space-between; gap:10px; margin-top:9px; flex-wrap:wrap; }
  .hzg-extra-pills { display:flex; align-items:center; gap:7px; flex:1 1 auto; min-width:0; flex-wrap:wrap; }
  .hzg-extra-pills > span { color:var(--ink-dim); font-size:12px; }
  .hzg-extra-pills > span span { margin-left:2px; opacity:.65; }
  .hzg-add-chip {
    appearance:none; margin-left:auto; flex:0 0 auto; white-space:nowrap; cursor:pointer;
    padding:6px 14px; border-radius:999px; border:1px solid #111; background:#111; color:#fff;
    font:inherit; font-size:12px; font-weight:700; letter-spacing:.02em; line-height:1.2;
  }
  .hzg-add-chip:hover { background:#000; }
  html[data-theme="dark"] .hzg-add-chip { border-color:#f3f3f3; background:#f3f3f3; color:#111; }
  html[data-theme="dark"] .hzg-add-chip:hover { background:#fff; }
  @container (max-width:470px){
    .jw-style-task-card .uploads.extras.hzg-upload-grid { grid-template-columns:repeat(2,minmax(0,126px)); }
    .hzg-combo-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }
    .hzg-combo-head { align-items:flex-start; flex-direction:column; gap:4px; }
    .hzg-combo-head small { text-align:left; }
    .uploads.extras.hzg-upload-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }
  }

  .prompt-box { width:100%; min-height:96px; padding:14px 16px; border:1px solid var(--glass-bd); border-radius:14px;
    background:rgba(255,255,255,.03); color:var(--ink); font-family:inherit; font-size:14px; resize:vertical; line-height:1.6; }
  .prompt-box::placeholder { color:var(--ink-dim); }
  .prompt-box:focus { outline:none; border-color:var(--c1); background:rgba(139,92,246,.06); }

  /* 创作文本必须保留系统编辑能力；凭据管理器误填时也不显示账号字段的蓝色底。 */
  .yitu-autofill-scope :is(input:not([type]),input[type="text"],input[type="search"],input[type="email"],textarea) {
    user-select:text;
    -webkit-user-select:text;
  }
  @keyframes yitu-workspace-autofill { from { opacity:.999; } to { opacity:1; } }
  .yitu-autofill-scope :is(input:not([type]),input[type="text"],input[type="search"],input[type="email"],textarea):-webkit-autofill {
    animation:yitu-workspace-autofill .01s;
    caret-color:var(--ink);
    -webkit-text-fill-color:var(--ink);
    box-shadow:0 0 0 1000px var(--surface) inset;
  }

  /* —— 产品精修 · 8 图批量工作台 —— */
  .params:has(.retouch-shell) { padding-bottom:0; }
  .retouch-shell { display:grid; gap:14px; }
  .retouch-queue { order:1; }
  .retouch-strategy { order:2; }
  .retouch-output { order:3; }
  .retouch-hero { display:flex; align-items:flex-start; justify-content:space-between; gap:16px; margin-bottom:2px; }
  .retouch-kicker { display:inline-flex; align-items:center; min-height:24px; padding:0 9px; border-radius:7px;
    border:1px solid rgba(34,211,238,.24); background:rgba(34,211,238,.07); color:#77e6f8; font-size:10px; font-weight:850; letter-spacing:.12em; }
  .retouch-hero h1 { font-size:24px; font-weight:850; margin:10px 0 6px; }
  .retouch-hero p { max-width:520px; font-size:13px; color:var(--ink-soft); line-height:1.65; }
  .retouch-limit { flex:0 0 auto; min-width:70px; padding:10px 12px; border:1px solid var(--glass-bd); border-radius:13px;
    background:rgba(255,255,255,.035); text-align:center; color:var(--ink-dim); font-size:10.5px; }
  .retouch-limit b { display:block; color:var(--ink); font-size:19px; font-variant-numeric:tabular-nums; margin-bottom:2px; }
  .retouch-card { border:1px solid var(--glass-bd); border-radius:17px; padding:15px; background:rgba(255,255,255,.032); }
  .retouch-card-head { display:flex; justify-content:space-between; align-items:center; gap:12px; margin-bottom:12px; }
  .retouch-card-head b { font-size:13.5px; }
  .retouch-card-head span { font-size:11.5px; color:var(--ink-dim); }
  .retouch-presets { display:grid; grid-template-columns:1fr 1fr; gap:12px; }
  .retouch-presets .field { margin:0; }
  .retouch-presets .pill { padding:8px 12px; font-size:12px; }
  .retouch-global { min-height:78px; resize:vertical; }
  .retouch-priority { display:flex; gap:9px; align-items:flex-start; margin-top:9px; padding:9px 11px; border-radius:10px;
    background:rgba(139,92,246,.08); color:var(--ink-dim); font-size:11.5px; line-height:1.55; }
  .retouch-priority b { color:#c4b5fd; white-space:nowrap; }
  .retouch-dropzone { min-height:116px; display:grid; place-items:center; text-align:center; border:1.5px dashed rgba(167,139,250,.42);
    border-radius:16px; background:rgba(139,92,246,.045); cursor:pointer; transition:all .2s var(--ease); padding:18px; }
  .retouch-dropzone:hover, .retouch-dropzone.drag { border-color:#a78bfa; background:rgba(139,92,246,.11); transform:translateY(-1px); }
  .retouch-dropzone strong { display:block; font-size:13.5px; color:var(--ink); margin-bottom:5px; }
  .retouch-dropzone span { font-size:11.5px; color:var(--ink-dim); line-height:1.5; }
  .retouch-list { display:grid; gap:10px; }
  .retouch-task { display:grid; grid-template-columns:92px minmax(0,1fr); gap:13px; align-items:stretch; padding:10px;
    border:1px solid var(--glass-bd); border-radius:15px; background:rgba(255,255,255,.028); transition:border-color .2s; }
  .retouch-task:focus-within { border-color:rgba(167,139,250,.55); }
  .retouch-thumb { position:relative; min-height:112px; border-radius:11px; overflow:hidden; background:#0d0d18; cursor:pointer; }
  .retouch-thumb img { width:100%; height:100%; position:absolute; inset:0; object-fit:cover; }
  .retouch-index { position:absolute; top:6px; left:6px; min-width:24px; height:22px; padding:0 7px; border-radius:999px;
    display:grid; place-items:center; background:rgba(6,6,12,.72); color:#fff; font-size:10.5px; font-weight:850; backdrop-filter:blur(6px); }
  .retouch-remove { position:absolute; top:6px; right:6px; width:24px; height:24px; border:0; border-radius:50%;
    background:rgba(6,6,12,.72); color:#fff; cursor:pointer; font-size:12px; }
  .retouch-remove:hover { background:#ef4444; }
  .retouch-task-body { min-width:0; display:flex; flex-direction:column; }
  .retouch-task-title { display:flex; align-items:center; justify-content:space-between; gap:10px; margin:1px 1px 7px; }
  .retouch-task-title b { font-size:12.5px; }
  .retouch-task-title span { color:#c4b5fd; font-size:10.5px; font-weight:700; }
  .retouch-task textarea { flex:1; min-height:82px; width:100%; border:1px solid rgba(255,255,255,.09); border-radius:10px;
    background:rgba(5,5,12,.35); color:var(--ink); padding:10px 11px; resize:vertical; font:12.5px/1.55 inherit; }
  .retouch-task textarea::placeholder { color:var(--ink-dim); }
  .retouch-task textarea:focus { outline:none; border-color:var(--c1); background:rgba(139,92,246,.055); }
  .retouch-summary { display:flex; justify-content:space-between; gap:10px; align-items:center; padding:0 2px; color:var(--ink-dim); font-size:11.5px; }
  .retouch-summary b { color:var(--ink-soft); }
  .retouch-shell .gen-bar { order:4; z-index:5; margin:0; padding:16px 0 22px; background:linear-gradient(transparent 0,var(--bg) 20%); }
  .retouch-shell.is-empty .gen-bar { position:relative; }
  @media (max-width:560px){
    .retouch-presets { grid-template-columns:1fr; }
    .retouch-task { grid-template-columns:76px minmax(0,1fr); }
    .retouch-thumb { min-height:120px; }
    .retouch-hero { display:block; }
    .retouch-limit { display:inline-flex; gap:5px; align-items:baseline; margin-top:10px; min-width:0; }
    .retouch-limit b { display:inline; font-size:14px; }
  }

  .gen-bar { position:sticky; bottom:0; z-index:5; background:linear-gradient(transparent, var(--bg) 12px); padding-top:18px; margin-top:8px; }
  /* 任务卡同时显示多个上传槽时，结算栏回到文档流，避免吸底时遮住“增加组”。 */
  .dc-simple-gen-bar { position:relative; bottom:auto; }
  .cost-row { display:flex; justify-content:space-between; align-items:center; font-size:13px; color:var(--ink-soft); margin-bottom:12px; }
  .cost-row .cost { font-weight:800; color:var(--ink); }
  .cost-detail { font-size:12px; color:var(--ink-dim); margin:-4px 0 12px; }
  .gen-btn { width:100%; padding:15px; font-size:16px; border-radius:14px;
    transition:transform 80ms ease-out, box-shadow 120ms ease-out, background-position 180ms ease, filter 80ms ease, opacity 80ms ease; }
  .gen-bar .gen-btn:not(:disabled):active { transform:scale(.985); }
  .sample-hint { text-align:center; margin-top:12px; font-size:13px; color:var(--ink-dim); cursor:pointer; transition:color .2s; }
  .sample-hint:hover { color:var(--ink-soft); }
  .sample-hint b { background:var(--grad); -webkit-background-clip:text; background-clip:text; color:transparent; font-weight:700; }
  .empty .sample-btn { margin-top:20px; }

  /* —— `dc-` 前缀的卡片/上传/设置样式 ——
     原为已删除的多件换衣页所写,现由其余创作面板复用;沿用易图现有暗色 token。 */
  .dc-card { border:1px solid var(--glass-bd); border-radius:18px; padding:16px; background:rgba(255,255,255,.035);
    box-shadow:0 12px 34px rgba(0,0,0,.12); }
  .dc-card-head { display:flex; align-items:center; justify-content:space-between; gap:12px; margin-bottom:12px; }
  .dc-card-title { font-size:14px; font-weight:800; color:var(--ink); }
  .dc-input { width:100%; height:44px; border:1px solid var(--glass-bd); border-radius:12px; padding:0 14px;
    background:rgba(255,255,255,.035); color:var(--ink); font:inherit; font-size:13.5px; }
  .dc-input::placeholder { color:var(--ink-dim); }
  .dc-input:focus { outline:none; border-color:var(--c1); box-shadow:0 0 0 3px rgba(139,92,246,.12); }
  .dc-upload-grid { display:grid; gap:12px; }
  .dc-upload-grid.cols-2 { grid-template-columns:repeat(2,minmax(0,1fr)); }
  .dc-upload-grid.cols-3 { grid-template-columns:repeat(3,minmax(0,1fr)); }
  .dc-upload { min-height:170px; aspect-ratio:auto; border-width:1.5px; border-radius:14px; padding:14px 12px; }
  .dc-accordion { padding:0; overflow:hidden; }
  /* 批量编排沿用桌面端“一行一组”的扫描方式：服装列 + 模特/参考列始终同时可见。 */
  /* 第三百三十三轮:原版设置面板网格紧凑化——槽/卡固定 150px 高,一行按宽度自适应多个,
     覆盖全局 aspect-ratio 3/4(宽面板下会被拉到 500px+ 高把内容顶出屏)。仅作用于本面板。 */
  @media (max-width:620px){
    .dc-card { padding:15px; }
    .dc-upload-grid.cols-2, .dc-upload-grid.cols-3 { grid-template-columns:1fr; }
    .dc-upload { min-height:170px; }
  }

  /* —— 结果区 —— */
  .canvas { flex:1; height:100%; overflow-y:auto; padding:28px 32px; }
  .welcome-hint { display:flex; align-items:center; gap:10px; background:var(--grad-soft); border:1px solid var(--glass-bd); border-radius:14px;
    padding:12px 16px; font-size:13.5px; color:var(--ink-soft); margin-bottom:18px; line-height:1.5; }
  .welcome-hint b { color:var(--ink); font-weight:700; }
  .welcome-hint .wh-action { margin-left:auto; min-height:34px; padding:7px 12px; border:1px solid rgba(167,139,250,.4); border-radius:10px; background:rgba(139,92,246,.16); color:#efe9ff; font:700 12px/1 inherit; cursor:pointer; flex-shrink:0; }
  .welcome-hint .wh-close { margin-left:auto; cursor:pointer; color:var(--ink-dim); font-size:14px; padding:2px 6px; flex-shrink:0; }
  .welcome-hint .wh-action + .wh-close { margin-left:0; }
  .welcome-hint .wh-close:hover { color:var(--ink); }
  .welcome-hint[hidden] { display:none; }
  .canvas-head { display:flex; justify-content:space-between; align-items:center; margin-bottom:20px; }
  .canvas-head h2 { font-size:16px; font-weight:700; color:var(--ink-soft); flex:none; white-space:nowrap; }
  .canvas-head .ch-hint { font-size:13px; color:#9191aa; min-width:0; word-break:keep-all; }
  .ch-left { display:flex; align-items:baseline; gap:12px; }
  /* 「本功能/全部」结果范围切换:会话内总览所有功能产出的小分段控件 */
  .ch-scope { display:inline-flex; gap:2px; padding:2px; border:1px solid rgba(255,255,255,.09); border-radius:999px; background:rgba(255,255,255,.04); flex:none; align-self:center; }
  .ch-scope .chs-btn { border:0; background:transparent; color:#9191aa; font-size:12px; line-height:1; padding:5px 11px; border-radius:999px; cursor:pointer; transition:color .15s, background .15s; font-weight:600; }
  .ch-scope .chs-btn:hover { color:var(--ink-soft); }
  .ch-scope .chs-btn.active { background:rgba(255,255,255,.12); color:var(--ink); }
  .canvas-tools { display:flex; gap:10px; flex:none; }
  .ct-btn { font-size:13px; font-weight:600; padding:8px 14px; border-radius:10px; border:1px solid var(--glass-bd); background:var(--glass); color:var(--ink); cursor:pointer; transition:all .2s var(--ease); font-family:inherit; white-space:nowrap; }
  .ct-btn:hover { border-color:rgba(255,255,255,.28); background:var(--glass-2); transform:translateY(-1px); }
  .result-session-note { display:flex; align-items:center; justify-content:space-between; gap:14px; margin:-4px 0 16px; padding:11px 14px; border:1px solid rgba(251,191,36,.3); border-radius:12px; background:rgba(251,191,36,.08); color:#ded6b2; font-size:12.5px; line-height:1.5; }
  .result-session-note[hidden] { display:none; }
  .result-session-note b { color:#fde68a; }
  .result-session-note button { flex:0 0 32px; width:32px; height:32px; border:0; border-radius:8px; background:rgba(255,255,255,.08); color:#fff; cursor:pointer; font-size:17px; }
  .empty { height:70%; display:grid; place-items:center; text-align:center; color:var(--ink-dim); }
  .empty .ei { font-size:60px; margin-bottom:16px; opacity:.5; }
  .empty .et { font-size:16px; font-weight:600; color:var(--ink-soft); }
  .empty .es { font-size:13.5px; margin-top:6px; }
  .empty-actions { display:flex; justify-content:center; align-items:center; gap:10px; flex-wrap:wrap; margin-top:22px; }
  .empty-actions .btn { min-width:160px; }
  .empty-proof { display:flex; justify-content:center; gap:16px; flex-wrap:wrap; margin-top:14px; color:#8f8fa4; font-size:11.5px; }
  .empty-proof span::before { content:'✓'; color:#7dffc4; margin-right:5px; }
  .onboard-pulse { animation:onboardPulse .9s ease-in-out 2 !important; }
  @keyframes onboardPulse { 50% { border-color:#a78bfa; box-shadow:0 0 0 5px rgba(139,92,246,.16),0 0 28px rgba(139,92,246,.24); } }
  /* 三步流程引导图(换装) */
  .flow-title { font-size:15px; font-weight:700; color:var(--ink-soft); margin-bottom:26px; }
  .flow3 { display:flex; align-items:center; justify-content:center; gap:14px; flex-wrap:wrap; }
  .flow-step { width:118px; height:138px; border-radius:16px; border:1px solid var(--glass-bd); background:var(--glass);
    display:grid; place-items:center; align-content:center; gap:12px; transition:all .25s var(--ease); }
  .flow-step:hover { border-color:rgba(255,255,255,.22); transform:translateY(-3px); }
  .flow-step .fs-ic { width:56px; height:56px; display:grid; place-items:center; border-radius:17px;
    color:#7dd3fc; border:1px solid rgba(125,211,252,.24); background:rgba(56,189,248,.075);
    box-shadow:inset 0 1px 0 rgba(255,255,255,.05),0 10px 28px rgba(14,165,233,.08);
    transition:transform .22s var(--ease),border-color .22s var(--ease),background .22s var(--ease); }
  .flow-step:hover .fs-ic { transform:translateY(-2px) scale(1.035); border-color:rgba(125,211,252,.48); background:rgba(56,189,248,.12); }
  .flow-step .fs-svg { width:29px; height:29px; display:block; }
  .flow-step .fs-tx { font-size:13px; font-weight:600; color:var(--ink-soft); }
  .flow-step .fs-no { position:absolute; transform:translate(-46px,-58px); width:22px; height:22px; border-radius:50%;
    background:var(--grad); color:#fff; font-size:12px; font-weight:700; display:grid; place-items:center; }
  .flow-arrow { font-size:24px; color:var(--c1); font-weight:700; }
  .outfit-example-flow { display:block; width:min(100%,520px); margin:0 auto; }
  .outfit-case-grid { display:grid; grid-template-columns:minmax(0,1fr) 22px minmax(0,1fr) 22px minmax(0,1fr); align-items:stretch; gap:7px; width:100%; }
  .outfit-case-card { min-width:0; margin:0; padding:7px 7px 9px; border:1px solid var(--glass-bd); border-radius:15px; background:var(--glass); box-shadow:0 8px 24px rgba(0,0,0,.06); }
  .outfit-case-photo { position:relative; width:100%; aspect-ratio:3/4; overflow:hidden; border-radius:10px; background:#f4f4f4; }
  .outfit-case-photo img { width:100%; height:100%; display:block; object-fit:cover; object-position:center top; }
  .outfit-case-card:first-child .outfit-case-photo img { object-position:center; }
  .outfit-case-photo span { position:absolute; top:6px; left:6px; z-index:2; width:23px; height:23px; display:grid; place-items:center; border-radius:50%; background:#111; color:#fff; font-size:11px; font-weight:800; box-shadow:0 3px 9px rgba(0,0,0,.22); }
  .outfit-case-card figcaption { min-height:34px; display:flex; align-items:center; justify-content:center; padding-top:7px; color:var(--ink-soft); font-size:11.5px; font-weight:700; line-height:1.35; }
  .clothing-product-example-picker { appearance:none; width:100%; color:inherit; font:inherit; cursor:pointer; transition:border-color .18s var(--ease),box-shadow .18s var(--ease),transform .18s var(--ease); }
  .clothing-product-example-picker:hover { border-color:#7dd3fc; box-shadow:0 10px 28px rgba(14,165,233,.16); transform:translateY(-2px); }
  .clothing-product-example-picker .outfit-case-photo b { position:absolute; right:6px; bottom:6px; z-index:2; padding:4px 7px; border-radius:7px; background:rgba(2,132,199,.92); color:#fff; font-size:9px; font-weight:850; box-shadow:0 3px 10px rgba(0,0,0,.18); }
  .clothing-product-example-caption { min-height:34px; display:flex; align-items:center; justify-content:center; padding-top:7px; color:#7dd3fc; font-size:11.5px; font-weight:800; line-height:1.35; }
  .outfit-case-arrow { align-self:center; display:grid; place-items:center; color:var(--ink-dim); font-size:22px; font-weight:800; transform:translateY(-16px); }
  .outfit-library-link { appearance:none; display:inline-flex; align-items:center; gap:5px; border:0; padding:5px 8px; border-radius:9px; background:transparent; color:var(--c3); cursor:pointer; font:600 12px/1.2 inherit; }
  .outfit-library-link:hover { background:rgba(255,255,255,.08); }
  .outfit-library-link.official-model-picker { padding:8px 10px; border:1px solid rgba(56,189,248,.5); background:rgba(56,189,248,.12); color:#7dd3fc; box-shadow:0 5px 18px rgba(14,165,233,.14); font-weight:800; }
  .outfit-library-link.official-model-picker:hover { border-color:#7dd3fc; background:rgba(56,189,248,.2); transform:translateY(-1px); }
  .official-model-picker em { padding:2px 5px; border-radius:5px; background:#0284c7; color:#fff; font-size:9px; font-style:normal; letter-spacing:.04em; }
  /* 第三百四十三轮:.gen-loading / .spinner / @keyframes spin 全部随 #genLoading DOM 一并删除(死代码) */

  /* 普通功能的历史结果跨批次共用同一个网格。批次节点继续留在 DOM 中负责
     任务计时、恢复和状态归属，但不再让“每次点击生成”强制另起一整行。 */
  .results { display:grid; grid-template-columns:repeat(auto-fill,minmax(220px,1fr)); gap:18px; }
  .result-batch { display:contents; }
  .result-batch-head { position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0,0,0,0); white-space:nowrap; border:0; }
  .result-batch-head > span:first-child { display:flex; align-items:baseline; gap:9px; min-width:0; }
  .result-batch-head b { color:var(--ink); font-size:13px; white-space:nowrap; }
  .result-batch-head em { color:#85859e; font-style:normal; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .rb-status { color:#c4b5fd; white-space:nowrap; font-variant-numeric:tabular-nums; }
  .rb-status.done { color:#80d8b5; }
  .rb-status.failed { color:#fda4af; }
  .result-batch-grid { display:contents; }
  /* 数字人也沿用模特换装的连续结果网格。此前每个数字人批次都显示为整行标题，
     单张生成时会强制一张卡占一行，浪费大量结果区空间；批次信息仍保留在无障碍标题中。 */
  .rb-dh-summary { display:inline-flex; align-items:center; gap:6px; flex-wrap:wrap; }
  .rb-dh-summary > span { padding:3px 8px; border-radius:999px; background:rgba(139,92,246,.1); color:var(--ink-soft); font-size:11px; font-weight:700; white-space:nowrap; }

  /* ============ AI 画布(ziyou)· 即梦 2026 对话式工作台皮肤 ============
     对着即梦(jimeng.jianying.com)图片生成工作台真页面逐项还原(第二百二十五轮实拍校准):
     纯深灰黑背景无渐变、青色主色;记录流按批分组(prompt行→紧贴图片组→建议chips→操作行),输入卡空态居中/有记录沉底;
     输入卡=参考图块+文本区+底部chips工具条(模型chip、比例+清晰度合并chip弹层、右侧计价+白色圆形发送钮)。
     全部作用域收在 body.ziyou-mode 下,不影响其他功能。 */
  body.ziyou-mode { background:#131316; }
  body.ziyou-mode .aurora { display:none; }
  body.ziyou-mode .welcome-hint, body.ziyou-mode .params, body.ziyou-mode .params-resizer,
  body.ziyou-mode .canvas-head, body.ziyou-mode .empty { display:none !important; }
  body.ziyou-mode .m-params-fab, body.ziyou-mode .m-params-close, body.ziyou-mode .m-params-mask { display:none !important; }
  body.ziyou-mode .canvas { background:#131316; display:flex; flex-direction:column; padding:20px clamp(18px, 4vw, 48px) 18px; }
  /* 画布页顶栏一体化:去掉极光紫毛玻璃感,与即梦深灰工作台连成整页(仅 ziyou-mode 作用域) */
  body.ziyou-mode .topbar { background:#17171b; backdrop-filter:none; border-bottom:1px solid rgba(255,255,255,.06); }
  body.ziyou-mode .balance-pill .bp-value { background:none; -webkit-background-clip:initial; background-clip:initial;
    color:#3cd6f5; -webkit-text-fill-color:#3cd6f5; }
  body.ziyou-mode .balance-pill, body.ziyou-mode .home-btn { background:#232327; border-color:rgba(255,255,255,.08); }
  /* 细暗滚动条(即梦同款观感) */
  body.ziyou-mode .canvas::-webkit-scrollbar { width:8px; }
  body.ziyou-mode .canvas::-webkit-scrollbar-track { background:transparent; }
  body.ziyou-mode .canvas::-webkit-scrollbar-thumb { background:#2c2c33; border-radius:99px; }
  body.ziyou-mode .canvas::-webkit-scrollbar-thumb:hover { background:#3a3a42; }
  /* —— 记录流(#results 在 ziyou-mode 下由 renderZiyouFeed 接管,不再是网格) —— */
  body.ziyou-mode .results { display:block; flex:0 0 auto; max-width:1060px; width:100%; margin:0 auto; }
  .zj-feedhead { display:flex; align-items:center; justify-content:space-between; margin:2px 0 18px; }
  .zj-feedhead .zj-day { font-size:17px; font-weight:700; color:#f2f3f5; }
  .zj-daysep { font-size:14px; font-weight:700; color:#c9cad0; margin:24px 0 14px; }
  .zj-daysep:first-of-type { margin-top:0; }
  .zj-card.dragging { border-color:#3cd6f5; box-shadow:0 0 0 1px rgba(60,214,245,.35), 0 10px 40px rgba(0,0,0,.4); }
  .zj-feedhead .zj-tools { display:flex; gap:8px; }
  .zj-toolbtn { display:flex; align-items:center; gap:6px; font-size:12.5px; font-weight:600; color:#d6d7db; padding:7px 13px;
    border-radius:9px; background:#232327; border:1px solid rgba(255,255,255,.07); cursor:pointer; transition:all .15s; font-family:inherit; }
  .zj-toolbtn:hover { color:#fff; border-color:rgba(255,255,255,.2); }
  .zj-batch { margin-bottom:34px; }
  .zj-prompt { font-size:13.5px; color:#f2f3f5; margin-bottom:12px; line-height:1.6; }
  .zj-prompt .zj-meta { color:#7c7d84; font-size:12.5px; margin-left:10px; }
  .zj-prompt .zj-meta i { font-style:normal; margin:0 7px; color:#3a3b40; }
  .zj-prompt .zj-copy { margin-left:8px; font-size:12px; cursor:pointer; opacity:0; transition:opacity .15s; }
  .zj-prompt:hover .zj-copy { opacity:.75; }
  .zj-prompt .zj-copy:hover { opacity:1; }
  .zj-info { color:#8a8b92; cursor:pointer; border-bottom:1px dotted #5a5b62; transition:color .15s; }
  .zj-info:hover { color:#e8e8ea; }
  .zj-detail { display:grid; grid-template-columns:repeat(auto-fill, minmax(220px, 1fr)); gap:4px 22px; margin:0 0 12px;
    padding:12px 14px; border-radius:10px; background:#1b1b20; border:1px solid rgba(255,255,255,.05); }
  .zj-detail .zj-dr { display:flex; justify-content:space-between; gap:12px; font-size:12px; }
  .zj-detail .zj-dr span { color:#8a8b92; flex-shrink:0; }
  .zj-detail .zj-dr b { color:#d6d7db; font-weight:600; text-align:right; word-break:break-all; }
  .zj-prog b { font-weight:700; margin-right:2px; }
  /* 结果卡与模特换装统一为独立圆角卡片：固定卡宽、18px 间距和同款边框。
     格子固定 1:1，原图 contain 完整显示；letterbox 用 --slot-preview-matte（白天白、黑夜黑）。
     骨架与成图同一网格同一槽位，避免出图后整列跳动。 */
  .zj-grid { display:grid; grid-template-columns:repeat(var(--zj-count,1),minmax(0,var(--zj-card-width,240px))); gap:var(--zj-grid-gap,18px); width:min(100%,var(--zj-grid-width,240px)); max-width:100%; overflow:visible; }
  .zj-cell { position:relative; width:100%; aspect-ratio:1; background:#1d1d21; overflow:hidden;
    box-sizing:border-box; border:1px solid var(--glass-bd); border-radius:16px; animation:none;
    transition:border-color .18s var(--ease),transform .18s var(--ease),box-shadow .18s var(--ease); }
  body.ziyou-mode .zj-cell:not(.pending):not(.failed) { background:var(--slot-preview-matte); }
  .zj-cell:not(.pending):hover { border-color:rgba(255,255,255,.28); transform:translateY(-2px); box-shadow:0 14px 34px rgba(0,0,0,.32); }
  .zj-grid > .skeleton { width:100%; box-sizing:border-box; aspect-ratio:1; }
  /* AI 画布也会在单张结果返回时整体重建记录流；历史图保持静止且不重复淡入。
     contain 露出的 letterbox 复用上传槽的 --slot-preview-matte：白天白、黑夜黑。
     img 必须 absolute 铺满格子，否则 height:100% 会按原比例撑高，再被 overflow:hidden 裁掉下半身。 */
  .zj-cell img { position:absolute; inset:0; width:100%; height:100%; object-fit:contain; object-position:center; background:var(--slot-preview-matte); display:block; animation:none; }
  /* .zj-aitag(「AI生成」角标)第三百六十五轮删除:用户拍板画布流也不要来源标记 */
  /* 单图 hover:上/下两条黑胶囊工具条(即梦同款) */
  .zj-cell .zj-ht, .zj-cell .zj-hb { position:absolute; left:50%; transform:translateX(-50%); display:flex; gap:4px; padding:5px 7px;
    border-radius:11px; background:rgba(16,16,18,.88); opacity:0; transition:opacity .15s; z-index:3; }
  .zj-cell .zj-ht { top:8px; }
  .zj-cell .zj-hb { bottom:8px; }
  .zj-cell:hover .zj-ht, .zj-cell:hover .zj-hb { opacity:1; }
  /* 画布记录卡操作：文字小标签（查看/下载/收藏/移除/重新生成/重新编辑）。 */
  .zj-hbtn { width:auto; height:26px; padding:0 8px; display:grid; place-items:center; border-radius:7px; color:#e8e8ea; font-family:inherit; font-size:11.5px; font-weight:600; white-space:nowrap; cursor:pointer; transition:background .12s; }
  .zj-hbtn:hover { background:#b8481f; color:#fff; }
  .zj-hbtn.zj-hbtn-wide { width:auto; min-width:68px; padding:0 10px; font-size:11.5px; font-weight:700; }
  /* 生成中批次:暗格 + 左上进度标签 + 状态行 */
  .zj-cell.pending { background:radial-gradient(circle at 50% 45%,#24242b,#1b1b20 72%); contain:paint; }
  .zj-cell .zj-prog { position:absolute; top:10px; left:10px; font-size:11.5px; font-weight:600; color:#e8e8ea;
    background:rgba(16,16,18,.8); padding:3px 9px; border-radius:6px; }
  .zj-status { display:flex; align-items:center; gap:9px; margin-top:11px; font-size:12.5px; color:#7c7d84; }
  .zj-status .zj-queue { font-size:11px; font-weight:600; color:#b9bac0; background:#232327; border:1px solid rgba(255,255,255,.07); padding:2.5px 8px; border-radius:5px; }
  /* 失败卡片(保持诚实报错,但按即梦深灰卡风格) */
  .zj-cell.failed { display:grid; place-items:center; }
  .zj-cell .zj-cell-open { position:absolute; inset:0; z-index:2; width:100%; height:100%; border:0; background:transparent; cursor:pointer; }
  .zj-cell .zj-cell-open:focus-visible { outline:2px solid #a78bfa; outline-offset:-3px; }
  .zj-cell.failed .zj-fail { text-align:center; padding:14px; }
  .zj-cell.failed .zj-fail .fi { width:28px; height:28px; border-radius:50%; border:2px solid currentColor; display:grid; place-items:center; margin:0 auto 8px; color:#e07a5f; font-size:15px; font-weight:800; line-height:1; }
  .zj-cell.failed .zj-fail .fm { font-size:11.5px; color:#f0a0a5; line-height:1.5; max-width:200px; }
  /* 批次操作行(重新编辑/再次生成) */
  .zj-acts { display:flex; gap:9px; margin-top:13px; }
  .zj-act { display:flex; align-items:center; gap:7px; font-size:12.5px; font-weight:600; color:#e8e8ea; padding:8px 15px;
    border-radius:999px; background:#232327; border:1px solid rgba(255,255,255,.08); cursor:pointer; transition:all .15s; font-family:inherit; }
  .zj-act:hover { border-color:rgba(255,255,255,.22); background:#2a2a2f; }
  /* —— 欢迎语 + 输入卡(composer):空态居中偏上(黄金位),有记录 sticky 沉底 —— */
  #zyComposer { display:none; }   /* 双保险:只在 AI 画布模式显示,防止内容残留漏进其他功能 */
  /* 注意:只设左右 auto,不写 margin shorthand——否则会以更高特异性覆盖下面 .centered/.docked 的上下 auto(曾导致空态输入卡贴顶到 22% 处) */
  body.ziyou-mode #zyComposer { display:block; width:100%; max-width:870px; margin-left:auto; margin-right:auto; overflow:visible; }
  body.ziyou-mode #zyComposer.zy-local-composer { max-width:870px; }
  /* .canvas 是纵向 flex,上下 auto 让 composer 垂直居中;再上移 5vh 到视觉黄金位(即梦空态同款,重心稳、下方留白不空洞) */
  #zyComposer.centered { margin-top:auto; margin-bottom:auto; transform:translateY(-5vh); }
  #zyComposer.docked { position:sticky; bottom:0; margin-top:auto; padding-top:14px;
    padding-bottom:env(safe-area-inset-bottom);   /* iPhone 底部 home 条不压住输入卡 */
    background:linear-gradient(transparent, #131316 34%); }
  .zj-hello { text-align:center; font-size:29px; font-weight:800; color:#f2f3f5; letter-spacing:.5px; margin-bottom:8px;
    background:linear-gradient(120deg,#f2f3f5 30%,#c8f2ff); -webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent; }
  .zj-hello-sub { text-align:center; font-size:13.5px; color:#7c7d84; margin-bottom:26px; }
  .zj-card { background:#1e1e22; border:1px solid rgba(255,255,255,.07); border-radius:18px; padding:16px 16px 12px;
    box-shadow:0 10px 40px rgba(0,0,0,.4); transition:border-color .2s; overflow:visible; }
  .zj-card:focus-within { border-color:rgba(255,255,255,.16); }
  .zj-card-main { display:flex; gap:14px; align-items:flex-start; }
  /* 参考图导入块:即梦的斜纸片(hover 立正 + 轻抬起),弱色画布图标透出"能放图"的语义,不再是干瘪虚线方块 */
  .zj-import { width:56px; height:66px; flex-shrink:0; border-radius:8px; background:#2a2a30;
    display:flex; flex-direction:column; align-items:center; justify-content:center; gap:2px;
    color:#7c7d84; font-size:16px; cursor:pointer; transform:rotate(-4deg); transition:all .22s var(--ease, cubic-bezier(.4,0,.2,1));
    border:1px solid rgba(255,255,255,.06);
    background-image:linear-gradient(135deg, transparent 40%, rgba(60,214,245,.05) 60%, transparent 80%); }
  .zj-import::before { content:'🖼'; font-size:14px; opacity:.35; }
  .zj-import::after { content:'+ 参考图'; font-size:9.5px; font-weight:600; letter-spacing:.3px; opacity:.6; }
  .zj-import:hover { color:#e8e8ea; transform:rotate(0deg) translateY(-3px); background:#33333a;
    border-color:rgba(60,214,245,.35); box-shadow:0 6px 16px rgba(0,0,0,.35); }
  .zj-import:hover::before { opacity:.7; }
  .zj-refs { display:flex; flex-wrap:wrap; gap:7px; flex-shrink:0; max-width:210px; }
  .zj-ref { position:relative; width:48px; height:56px; border-radius:8px; overflow:hidden; cursor:grab; touch-action:none; border:1px solid rgba(255,255,255,.09); }
  .zj-ref img, .zy-local-ref-card img { width:100%; height:100%; object-fit:cover; display:block; pointer-events:none; user-select:none; -webkit-user-drag:none; }
  .zj-ref:hover { border-color:#3cd6f5; }
  /* 删除按钮必须始终可见:触屏没有 hover,桌面端隐藏到 hover 也很难发现,会让用户误以为图片删不掉。 */
  .zj-ref .zj-ref-del { position:absolute; z-index:6; top:2px; right:2px; width:18px; height:18px; border-radius:50%;
    background:rgba(12,12,15,.88); border:1px solid rgba(255,255,255,.28); box-shadow:0 2px 8px rgba(0,0,0,.45);
    color:#fff; font-size:9px; font-weight:800; display:grid; place-items:center; opacity:.94; cursor:pointer;
    transition:opacity .15s, background .15s, transform .15s; }
  .zj-ref:hover .zj-ref-del, .zj-ref .zj-ref-del:hover { opacity:1; background:#d94b62; transform:scale(1.06); }
  .zj-ref-order { position:absolute; z-index:5; top:2px; left:2px; width:20px; height:17px; padding:0; border-radius:5px; display:grid; place-items:center; background:rgba(17,17,22,.82); color:#fff; font-size:8px; font-weight:750; line-height:1; font-family:inherit; white-space:nowrap; pointer-events:none; }
  .zj-ref-local-edit { position:absolute; z-index:7; left:2px; right:2px; bottom:2px; height:18px; min-height:0; padding:0 2px; border:1px solid rgba(255,255,255,.24); border-radius:5px; background:rgba(72,35,128,.9); color:#fff; font-size:8.5px; font-weight:700; line-height:1; font-family:inherit; white-space:nowrap; letter-spacing:-.2px; cursor:pointer; opacity:.92; transition:opacity .12s,background .12s; }
  .zj-ref:hover .zj-ref-local-edit,.zj-ref:focus-within .zj-ref-local-edit { opacity:1; }
  .zj-ref-local-edit:hover { background:#6d28d9; }
  .zj-ref.dragging,.zy-local-ref-card.dragging { opacity:.45; transform:scale(.97); cursor:grabbing; }
  .zj-ref.dragging:hover { transform:scale(.97); }
  .zj-ref.drop-target,.zy-local-ref-card.drop-target { border-color:#3cd6f5; box-shadow:0 0 0 2px rgba(60,214,245,.45); }
  .zj-ref-add { width:48px; height:56px; border-radius:8px; border:1.5px dashed rgba(255,255,255,.2); color:#9b9ca3;
    display:grid; place-items:center; font-size:16px; cursor:pointer; transition:all .15s; }
  .zj-ref-add:hover { border-color:#3cd6f5; color:#e8e8ea; }
  .zj-import-col { display:flex; flex-direction:column; gap:7px; align-items:center; flex-shrink:0; }
  .zj-fav-btn { width:34px; height:26px; border-radius:8px; display:grid; place-items:center; font-size:13px;
    background:#232327; border:1px solid rgba(255,255,255,.08); color:#9b9ca3; cursor:pointer; transition:all .15s; align-self:center; }
  .zj-fav-btn:hover { color:#e8e8ea; border-color:rgba(60,214,245,.5); }
  /* 原生 textarea：文字、光标、选择区和滚动都由浏览器同一个控件负责，避免镜像层错位。 */
  .zj-input-wrap { flex:1; position:relative; min-width:0; }
  .zj-input { display:block; width:100%; min-height:78px; max-height:220px; background:transparent; border:none; outline:none;
    resize:none; color:#f2f3f5; font-size:14px; line-height:1.7; font-family:inherit; padding-top:4px;
    white-space:pre-wrap; word-wrap:break-word; overflow-wrap:break-word; overflow-y:auto; overscroll-behavior:contain;
    touch-action:pan-y; box-sizing:border-box; }
  .zj-input::placeholder { color:#63646b; }
  /* 字数计数:悬浮在输入区右下角(即梦风格),接近上限时红字警告 */
  .jm-charcount { position:absolute; right:6px; bottom:2px; font-size:10.5px; color:#5a5b62; pointer-events:none;
    font-variant-numeric:tabular-nums; z-index:3; }
  .jm-charcount.near-limit { color:#f0a0a5; font-weight:600; }
  /* 参考图 hover 增强:轻微上抬 + 底部 role 快切条(点击也能循环) */
  .zj-ref { transition:transform .18s var(--ease, ease); cursor:grab; }
  .zj-ref:hover { transform:translateY(-2px); }
  .zj-ref-role { transition:opacity .15s; }
  .zj-ref:hover .zj-ref-role { opacity:.95; }
  .zj-ref .zj-role-hint { position:absolute; top:2px; left:2px; font-size:9.5px; padding:1px 5px; border-radius:4px;
    background:rgba(16,16,18,.75); color:#c8f2ff; opacity:0; transition:opacity .15s; pointer-events:none; }
  .zj-ref:hover .zj-role-hint { opacity:1; }
  /* 发送按钮达到并发上限时:换成小 spinner,禁点 */
  .zj-send.zs-busy { background:#232327; color:#7c7d84; cursor:not-allowed; pointer-events:none;
    border:1px solid rgba(255,255,255,.08); position:relative; }
  .zj-send.zs-busy::before { content:''; position:absolute; inset:9px; border-radius:50%;
    border:2px solid rgba(255,255,255,.15); border-top-color:#3cd6f5; animation:zjSendSpin .8s linear infinite; }
  .zj-send.zs-busy > * { opacity:0; }
  @keyframes zjSendSpin { to { transform:rotate(360deg); } }
  /* 输入卡底部工具条:chips 一排(即梦同款) */
  .zj-bar { display:flex; align-items:center; gap:8px; margin-top:12px; position:relative; overflow:visible; }
  .zj-at-host { position:absolute; right:0; bottom:0; width:0; height:0; overflow:visible; pointer-events:none; }
  .zj-at-host .zj-atmenu { pointer-events:auto; }
  .zj-chip { position:relative; display:flex; align-items:center; gap:7px; height:36px; padding:0 13px; border-radius:10px;
    background:#232327; border:1px solid rgba(255,255,255,.08); font-size:12.5px; font-weight:600; color:#e8e8ea;
    cursor:pointer; transition:all .15s; white-space:nowrap; overflow:visible; }
  .zj-chip:has(.zj-panel.show),
  .zj-chip:has(.zj-mmenu.show) { z-index:50; }
  .zj-chip:hover { border-color:rgba(255,255,255,.22); }
  .zj-chip .ci { font-size:14px; }
  .zj-chip .cd { color:#5a5b62; margin:0 2px; }
  .zj-chip .caret { font-size:9px; color:#9b9ca3; }
  .zj-chip.brand { color:#3cd6f5; }
  .zj-chip.brand .caret { color:#3cd6f5; }
  .zj-bar-right { margin-left:auto; display:flex; align-items:center; gap:12px; }
  .zj-cost { font-size:12px; color:#9b9ca3; }
  .zj-cost .spark { color:#3cd6f5; margin-right:3px; }
  .zj-send { width:38px; height:38px; border-radius:50%; border:none; background:#f2f3f5; color:#131316; font-size:16px;
    display:grid; place-items:center; cursor:pointer; transition:all .18s; }
  .zj-send:hover { transform:translateY(-1px); background:#fff; }
  .zj-send:disabled { background:#3a3b40; color:#7c7d84; cursor:not-allowed; transform:none; }

  /* AI 画布 · 高精度框选局部修改 */
  .zy-local-workspace { width:100%; max-width:1040px; margin:0 auto; display:grid; gap:14px; }
  .zy-local-toolbar { display:flex; align-items:center; justify-content:space-between; gap:20px; min-height:44px; }
  .zy-local-toolbar > div:first-child { display:grid; gap:3px; }
  .zy-local-toolbar b { color:#f3f3f5; font-size:16px; }
  .zy-local-toolbar span { color:#86868f; font-size:12.5px; }
  .zy-local-tools { display:flex; gap:8px; }
  .zy-local-tools button,.zy-local-empty button,.zy-local-clear,.zy-local-reference-head button { min-height:36px; padding:0 14px; border-radius:10px; border:1px solid rgba(255,255,255,.1); background:#232327; color:#dedee3; font:600 12.5px/1 inherit; cursor:pointer; }
  .zy-local-tools button:hover,.zy-local-empty button:hover,.zy-local-clear:hover,.zy-local-reference-head button:hover { border-color:rgba(255,255,255,.24); background:#2c2c31; }
  .zy-local-tools button.primary { border-color:#7c3aed; background:#6d28d9; color:#fff; }
  .zy-local-tools button.primary:hover { border-color:#8b5cf6; background:#7c3aed; }
  .zy-local-tools button:disabled,.zy-local-clear:disabled,.zy-local-reference-head button:disabled { opacity:.42; cursor:not-allowed; }
  .zy-local-stage { position:relative; min-height:420px; display:grid; place-items:center; padding:18px; border-radius:18px; background:#000; border:1px solid rgba(255,255,255,.07); overflow:hidden; }
  .zy-local-confirm-float { position:absolute; right:20px; bottom:20px; z-index:6; min-height:46px; padding:0 20px; display:flex; align-items:center; gap:8px; border:1px solid rgba(255,255,255,.24); border-radius:14px; background:#6d28d9; color:#fff; box-shadow:0 10px 28px rgba(76,29,149,.34); font:750 14px/1 inherit; cursor:pointer; }
  .zy-local-cancel-float { position:absolute; right:202px; bottom:20px; z-index:6; min-height:46px; padding:0 18px; border:1px solid rgba(255,255,255,.16); border-radius:14px; background:rgba(255,255,255,.9); color:#3f3a49; box-shadow:0 8px 24px rgba(40,34,52,.14); font:700 13px/1 inherit; cursor:pointer; }
  .zy-local-cancel-float:hover { background:#fff; transform:translateY(-1px); }
  .zy-local-confirm-float:hover { background:#7c3aed; transform:translateY(-1px); }
  .zy-local-confirm-float:disabled { opacity:.38; cursor:not-allowed; transform:none; box-shadow:none; }
  .zy-local-confirm-float span { width:21px; height:21px; display:grid; place-items:center; border-radius:50%; background:rgba(255,255,255,.18); font-size:12px; }
  .zy-local-image-wrap { position:relative; display:inline-block; max-width:100%; line-height:0; cursor:crosshair; touch-action:none; user-select:none; -webkit-user-select:none; }
  .zy-local-image-wrap > img { display:block; max-width:100%; max-height:min(56vh,570px); width:auto; height:auto; border-radius:12px; pointer-events:none; -webkit-user-drag:none; }
  .zy-local-selection { position:absolute; box-sizing:border-box; border:2px solid #a78bfa; background:rgba(139,92,246,.09); box-shadow:0 0 0 9999px rgba(8,8,12,.18); pointer-events:auto; cursor:move; }
  .zy-local-selection.drawing { border-style:dashed; box-shadow:none; pointer-events:none; }
  .zy-local-selection i { position:absolute; width:10px; height:10px; border-radius:2px; background:#fff; border:2px solid #8b5cf6; box-shadow:0 1px 4px rgba(0,0,0,.24); pointer-events:auto; }
  .zy-local-selection i:nth-child(1){left:-6px;top:-6px}.zy-local-selection i:nth-child(2){right:-6px;top:-6px}.zy-local-selection i:nth-child(3){left:-6px;bottom:-6px}.zy-local-selection i:nth-child(4){right:-6px;bottom:-6px}
  .zy-local-selection i[data-handle="nw"],.zy-local-selection i[data-handle="se"] { cursor:nwse-resize; }
  .zy-local-selection i[data-handle="ne"],.zy-local-selection i[data-handle="sw"] { cursor:nesw-resize; }
  .zy-local-selection span { position:absolute; left:-2px; top:-30px; height:24px; padding:0 9px; display:flex; align-items:center; border-radius:7px; background:#8b5cf6; color:#fff; font-size:11px; font-weight:750; line-height:1; white-space:nowrap; }
  .zy-local-tool-switch { display:flex; gap:6px; flex-wrap:wrap; }
  .zy-local-tool-switch button { min-height:34px; padding:0 13px; border:1px solid rgba(255,255,255,.12); border-radius:999px; background:#232327; color:#c9c9d1; font:650 12.5px/1 inherit; cursor:pointer; }
  .zy-local-tool-switch button:hover { border-color:rgba(255,255,255,.28); color:#fff; }
  .zy-local-tool-switch button.active { border-color:#e11d48; background:rgba(225,29,72,.16); color:#fff; }
  .zy-local-mark-overlay { position:absolute; inset:0; width:100%; height:100%; pointer-events:none; }
  .zy-local-lasso { fill:rgba(225,29,72,.40); stroke:#e11d48; stroke-width:16; stroke-linejoin:round; stroke-linecap:round; }
  .zy-local-lasso-open { fill:none; stroke:#e11d48; stroke-width:16; stroke-linejoin:round; stroke-linecap:round; }
  .zy-local-doodle { fill:none; stroke:#e11d48; stroke-width:36; stroke-linejoin:round; stroke-linecap:round; }
  .zy-local-point-ring { fill:none; stroke:#e11d48; stroke-width:8; }
  .zy-local-point-dot { fill:#e11d48; stroke:#fff; stroke-width:4; }
  .hzg-local-edit-dialog .zy-local-tool-switch,.source-pre-edit-dialog .zy-local-tool-switch { padding:0 2px; }
  .zy-local-workspace.empty-source { min-height:470px; display:grid; place-items:center; border:1px dashed rgba(255,255,255,.14); border-radius:18px; background:rgba(255,255,255,.015); }
  .zy-local-empty { text-align:center; display:grid; justify-items:center; gap:9px; }
  .zy-local-empty b { color:#f3f3f5; font-size:18px; }
  .zy-local-empty p { margin:0 0 10px; color:#86868f; font-size:13px; }
  .zy-local-source-choices { width:min(720px,80vw); display:flex; justify-content:center; gap:10px; padding:6px 0 12px; overflow-x:auto; }
  .zy-local-source-choice { width:112px; flex:0 0 112px; padding:7px!important; height:auto!important; display:grid; gap:7px; background:#17171b!important; }
  .zy-local-source-choice img { width:96px; height:112px; object-fit:cover; border-radius:7px; }
  .zy-local-source-choice span { color:#cfcfd6; font-size:11px; }
  .zy-local-source-thumb { width:58px; height:70px; flex:0 0 58px; display:grid; place-items:center; border-radius:10px; border:1px solid rgba(255,255,255,.1); background:#29292f; overflow:hidden; cursor:pointer; }
  .zy-local-source-thumb img { grid-area:1/1; width:100%; height:100%; object-fit:cover; }
  .zy-local-source-thumb span { padding:6px; color:#a7a7ae; font-size:11px; line-height:1.35; text-align:center; }
  .zy-local-source-thumb em { grid-area:1/1; align-self:end; width:100%; padding:4px 0; background:rgba(15,10,25,.78); color:#ddd6fe; font:700 10px/1 inherit; text-align:center; font-style:normal; }
  .zy-local-reference-panel { display:grid; gap:10px; padding:14px; border:1px solid rgba(255,255,255,.08); border-radius:14px; background:rgba(255,255,255,.018); }
  .zy-local-reference-head { display:flex; align-items:center; justify-content:space-between; gap:16px; }
  .zy-local-reference-head > div { display:grid; gap:3px; }
  .zy-local-reference-head b { color:#e9e8ed; font-size:13px; }
  .zy-local-reference-head span { color:#85858e; font-size:11.5px; }
  .zy-local-reference-list { display:flex; gap:10px; min-height:92px; overflow-x:auto; }
  .zy-local-ref-card { position:relative; width:106px; height:92px; flex:0 0 106px; overflow:hidden; border:1px solid rgba(167,139,250,.28); border-radius:10px; background:#17171b; cursor:grab; touch-action:none; }
  .zy-local-ref-card img { width:100%; height:100%; object-fit:cover; pointer-events:none; user-select:none; -webkit-user-drag:none; }
  .zy-local-ref-card > span { position:absolute; left:6px; top:6px; padding:4px 6px; border-radius:6px; background:rgba(15,10,25,.78); color:#ede9fe; font-size:10px; font-weight:700; }
  .zy-local-ref-card button { position:absolute; border:0; color:#fff; cursor:pointer; }
  .zy-local-ref-card .make-main { left:6px; bottom:6px; padding:5px 7px; border-radius:6px; background:rgba(17,17,22,.78); font:650 10px/1 inherit; }
  .zy-local-ref-card .move-left,.zy-local-ref-card .move-right { bottom:6px; width:24px; height:24px; border-radius:6px; background:rgba(17,17,22,.78); font-size:18px; line-height:1; }
  .zy-local-ref-card .move-left { right:34px; }
  .zy-local-ref-card .move-right { right:6px; }
  .zy-local-ref-card .move-left:disabled,.zy-local-ref-card .move-right:disabled { opacity:.34; cursor:not-allowed; }
  .zy-local-ref-card .remove-ref { right:5px; top:5px; width:22px; height:22px; border-radius:50%; background:rgba(17,17,22,.76); font-size:15px; }
  .zy-local-reference-empty { width:100%; display:grid; place-items:center; color:#777780; font-size:12px; text-align:center; }
  .zy-local-composer-refs { max-width:286px; }
  .zy-local-composer-refs .zj-ref { width:52px; height:62px; }
  .zy-local-composer-refs .zj-ref-add { width:52px; height:62px; }
  .zy-local-main-ref { border:2px solid #8b5cf6; box-shadow:0 0 0 2px rgba(139,92,246,.12); }
  .zy-local-main-ref .zj-ref-role { position:absolute; z-index:5; top:2px; right:2px; padding:2px 5px; border-radius:5px; background:#6d28d9; color:#fff; font-size:8px; font-weight:750; }
  .zy-local-card .zj-input { min-height:70px; }
  .zy-local-clear { align-self:flex-start; flex:0 0 auto; background:transparent; }
  .zy-local-exit { font-family:inherit; }
  .zy-local-fixed { cursor:default; }
  .zy-local-card .zj-chip.active { border-color:rgba(139,92,246,.5); background:rgba(139,92,246,.13); color:#c4b5fd; }

  html[data-theme="light"] body.ziyou-mode .zy-local-toolbar b,
  html[data-theme="light"] body.ziyou-mode .zy-local-empty b { color:#17141d; }
  html[data-theme="light"] .zy-local-tool-switch button { background:#fff; border-color:#d8d2df; color:#443d50; }
  html[data-theme="light"] .zy-local-tool-switch button.active { border-color:#e11d48; background:#fff1f2; color:#be123c; }
  html[data-theme="light"] body.ziyou-mode .zy-local-toolbar span,
  html[data-theme="light"] body.ziyou-mode .zy-local-hint,
  html[data-theme="light"] body.ziyou-mode .zy-local-empty p { color:#817b8d; }
  html[data-theme="light"] body.ziyou-mode .zy-local-stage { background:#fff; border-color:#e2dee8; }
  html[data-theme="light"] body.ziyou-mode .zy-local-confirm-float { border-color:#7c3aed; background:#6d28d9; color:#fff; }
  html[data-theme="light"] body.ziyou-mode .zy-local-cancel-float { border-color:#d8d2df; background:#fff; color:#443d50; }
  html[data-theme="light"] body.ziyou-mode .zy-local-tools button,
  html[data-theme="light"] body.ziyou-mode .zy-local-empty button,
  html[data-theme="light"] body.ziyou-mode .zy-local-clear,
  html[data-theme="light"] body.ziyou-mode .zy-local-reference-head button { background:#fff; border-color:#ded9e6; color:#4b4358; }
  html[data-theme="light"] body.ziyou-mode .zy-local-tools button:hover,
  html[data-theme="light"] body.ziyou-mode .zy-local-empty button:hover,
  html[data-theme="light"] body.ziyou-mode .zy-local-clear:hover,
  html[data-theme="light"] body.ziyou-mode .zy-local-reference-head button:hover { border-color:#b9afc8; background:#f7f5fa; }
  html[data-theme="light"] body.ziyou-mode .zy-local-workspace.empty-source { border-color:#d9d3e1; background:#fbfafc; }
  html[data-theme="light"] body.ziyou-mode .zy-local-source-thumb { background:#f2f0f5; border-color:#ddd8e5; }
  html[data-theme="light"] body.ziyou-mode .zy-local-reference-panel { border-color:#e2dee8; background:#fbfafc; }
  html[data-theme="light"] body.ziyou-mode .zy-local-reference-head b { color:#2b2534; }
  html[data-theme="light"] body.ziyou-mode .zy-local-reference-head span { color:#817b8d; }
  html[data-theme="light"] body.ziyou-mode .zy-local-ref-card { background:#f2f0f5; border-color:#d7ccec; }
  html[data-theme="light"] body.ziyou-mode .zy-local-card .zj-chip.active { border-color:rgba(109,40,217,.34); background:#eee9f8; color:#6d28d9; }
  @media (max-width:768px){
    body.ziyou-mode .canvas { padding-left:12px; padding-right:12px; }
    .zy-local-toolbar { align-items:flex-start; }
    .zy-local-toolbar span { max-width:210px; }
    .zy-local-tools button:first-child { display:none; }
    .zy-local-stage { min-height:300px; padding:8px; border-radius:14px; }
    .zy-local-confirm-float { right:12px; bottom:12px; min-height:42px; padding:0 15px; border-radius:12px; }
    .zy-local-cancel-float { right:174px; bottom:12px; min-height:42px; padding:0 13px; border-radius:12px; }
    .zy-local-image-wrap > img { max-height:48vh; border-radius:9px; }
    .zy-local-workspace.empty-source { min-height:340px; }
    .zy-local-source-choices { width:calc(100vw - 48px); justify-content:flex-start; }
    .zy-local-card { padding:12px 12px 10px; }
    .zy-local-card .zj-card-main { gap:9px; }
    .zy-local-source-thumb { width:48px; height:58px; flex-basis:48px; }
    .zy-local-clear { display:none; }
    .zy-local-card .zj-input { min-height:64px; font-size:16px; }
    .zy-local-card .zj-bar { flex-wrap:wrap; }
    .zy-local-card .zj-bar-right { width:100%; margin-left:0; justify-content:flex-end; }
    .zy-local-selection span { top:6px; left:6px; }
    .zy-local-reference-head { align-items:flex-start; }
    .zy-local-reference-head span { max-width:220px; }
    .zy-local-reference-list { min-height:82px; }
    .zy-local-ref-card { width:94px; height:82px; flex-basis:94px; }
    .zj-ref-local-edit { opacity:1; transform:none; }
  }
  /* 视频模式:输入卡整体带一点粉紫渐变边框、发送钮变成粉色渐变,与「图片=白」拉开辨识度 */
  .zj-card-video { border-color:rgba(236,72,153,.28); box-shadow:0 0 0 1px rgba(236,72,153,.08), 0 10px 30px rgba(0,0,0,.35); }
  .zj-card-video .zj-chip.brand { border-color:rgba(236,72,153,.5); background:rgba(236,72,153,.14); }
  .zj-card-video .zj-chip.brand .ci, .zj-card-video .zj-chip.brand .caret { color:#ec4899; }
  .zj-card-video .zj-send:not(:disabled) { background:linear-gradient(135deg,#ec4899,#a855f7); color:#fff; }
  .zj-card-video .zj-send:not(:disabled):hover { background:linear-gradient(135deg,#f472b6,#c084fc); }
  .zj-card-video .zj-cost .spark { color:#ec4899; }
  /* 视频模式提示条:改为粉紫底色,与图片模式的青色区分 */
  body.ziyou-mode .zj-card-video ~ .zj-mode-hint { background:rgba(236,72,153,.1); border-color:rgba(236,72,153,.32); color:#ffd0e6; }
  /* 比例+清晰度+数量弹层(点合并 chip 向上弹出,即梦同款结构) */
  .zj-panel { position:absolute; bottom:calc(100% + 10px); left:0; width:390px; max-width:82vw; background:#26262b;
    border:1px solid rgba(255,255,255,.09); border-radius:14px; padding:14px; box-shadow:0 18px 50px rgba(0,0,0,.55);
    display:none; z-index:40; cursor:default; }
  .zj-panel.show { display:block; }
  .zj-panel .pt { font-size:12px; color:#9b9ca3; margin:2px 0 9px; }
  .zj-panel .pt:not(:first-child) { margin-top:14px; }
  .zj-ratios { display:grid; grid-template-columns:repeat(6, 1fr); gap:2px; }
  .zj-ratio { display:grid; place-items:center; gap:5px; padding:8px 2px 7px; border-radius:9px;
    color:#9b9ca3; font-size:11px; cursor:pointer; transition:all .12s; }
  .zj-ratio:hover { background:rgba(255,255,255,.05); color:#e8e8ea; }
  .zj-ratio.active { background:#37373d; color:#f2f3f5; }
  .zj-ratio .ri { display:inline-block; border:1.5px solid currentColor; border-radius:3px; }
  .zj-ratio .ri-auto { border:none; font-size:13px; }
  .zj-tiers { display:flex; gap:6px; }
  .zj-tier { flex:1; text-align:center; padding:9px 4px; border-radius:9px; background:#2e2e34; color:#c9cad0; font-size:12px;
    font-weight:600; cursor:pointer; transition:all .12s; border:1px solid transparent; }
  .zj-tier:hover { color:#fff; }
  .zj-tier.active { background:#3a3a41; color:#f2f3f5; border-color:rgba(255,255,255,.14); }
  .zj-tier .tp { display:block; font-size:10.5px; color:#8a8b92; font-weight:500; margin-top:2px; }
  .zj-panel .zj-hint { font-size:11px; color:#63646b; margin-top:9px; line-height:1.5; }
  /* 模型下拉(向上弹,列表项=名称+徽标+描述+选中✓,即梦同款) */
  .zj-mmenu { position:absolute; bottom:calc(100% + 10px); left:0; width:330px; max-width:80vw; background:#26262b;
    border:1px solid rgba(255,255,255,.09); border-radius:14px; padding:8px; box-shadow:0 18px 50px rgba(0,0,0,.55);
    display:none; z-index:40; cursor:default; }
  .zj-mmenu.show { display:block; }
  .zj-mmenu .mt { font-size:11.5px; color:#9b9ca3; padding:6px 10px 8px; }
  .zj-mopt { display:flex; align-items:center; gap:11px; padding:10px; border-radius:10px; cursor:pointer; transition:background .12s; }
  .zj-mopt:hover { background:rgba(255,255,255,.05); }
  .zj-mopt.active { background:#37373d; }
  .zj-mopt .mi { width:34px; height:34px; border-radius:8px; background:#3a3a41; display:grid; place-items:center; font-size:15px; flex-shrink:0; }
  .zj-mopt .mn { font-size:13px; font-weight:600; color:#f2f3f5; }
  .zj-mopt .md { font-size:11px; color:#8a8b92; margin-top:2px; }
  .zj-mopt .mc { margin-left:auto; color:#3cd6f5; font-size:13px; }

  /* @ 主体 popover(即梦「可能@的内容」同款):独立 class,避免被 closePanels 与 zjOpenPanel 状态误关 */
  .zj-atmenu { position:absolute; bottom:calc(100% + 10px); right:0; width:280px; max-width:82vw;
    background:#26262b; border:1px solid rgba(255,255,255,.09); border-radius:14px; padding:10px;
    box-shadow:0 18px 50px rgba(0,0,0,.55); display:none; z-index:40; cursor:default; }
  .zj-atmenu.show { display:block; animation:zjPopIn .18s cubic-bezier(.16,1,.3,1); transform-origin:right bottom; }
  @keyframes zjPopIn { from { opacity:0; transform:translateY(6px) scale(.96); } to { opacity:1; transform:translateY(0) scale(1); } }
  .zj-mmenu.show { animation:zjPopIn .18s cubic-bezier(.16,1,.3,1); transform-origin:left bottom; }
  .zj-panel.show { animation:zjPopIn .18s cubic-bezier(.16,1,.3,1); transform-origin:left bottom; }
  /* 首次进画布的一次性引导气泡:指向 @ 按钮,10s 自动隐 */
  .zj-at-hint { position:absolute; bottom:calc(100% + 14px); right:-4px; width:250px; z-index:50;
    background:linear-gradient(135deg,#3cd6f5,#7a4fff); color:#0c1116; border-radius:12px;
    padding:12px 14px; box-shadow:0 12px 32px rgba(60,214,245,.35); animation:zjPopIn .3s cubic-bezier(.16,1,.3,1); cursor:default; }
  .zj-at-hint .zh-body b { font-size:13.5px; font-weight:800; }
  .zj-at-hint .zh-sub { font-size:11.5px; margin-top:4px; opacity:.85; line-height:1.5; }
  .zj-at-hint .zh-ok { margin-top:9px; font-size:11.5px; font-weight:700; padding:5px 12px; border-radius:999px;
    border:none; background:rgba(12,17,22,.85); color:#f2f3f5; cursor:pointer; font-family:inherit; }
  .zj-at-hint .zh-ok:hover { background:#0c1116; }
  .zj-at-hint .zh-arrow { position:absolute; bottom:-6px; right:16px; width:12px; height:12px;
    background:linear-gradient(135deg,transparent 50%,#7a4fff 50%); transform:rotate(45deg); border-radius:2px; }
  .zj-atmenu .at-hint { font-size:11.5px; color:#8a8b92; padding:2px 4px 8px; }
  .zj-atmenu .at-tabs { display:flex; gap:4px; padding:0 2px 8px; border-bottom:1px solid rgba(255,255,255,.06); margin-bottom:8px; }
  .zj-atmenu .at-tab { flex:1; text-align:center; padding:6px 8px; border-radius:8px; font-size:12px; font-weight:600;
    color:#9b9ca3; cursor:pointer; transition:all .12s; }
  .zj-atmenu .at-tab:hover { color:#e8e8ea; }
  .zj-atmenu .at-tab.active { background:#37373d; color:#f2f3f5; }
  .zj-atmenu .at-search { display:block; width:100%; height:30px; padding:0 10px; margin-bottom:8px; box-sizing:border-box;
    background:#1c1c22; border:1px solid rgba(255,255,255,.08); border-radius:8px; color:#e8e8ea; font-size:12.5px;
    font-family:inherit; outline:none; transition:border-color .12s; }
  .zj-atmenu .at-search:focus { border-color:rgba(60,214,245,.5); }
  .zj-atmenu .at-search::placeholder { color:#5a5b62; }
  .zj-atmenu .at-section { font-size:10.5px; color:#63646b; padding:4px 8px 2px; letter-spacing:.5px; }
  .zj-atmenu .at-list { max-height:280px; overflow-y:auto; padding-right:2px; }
  .zj-atmenu .at-list::-webkit-scrollbar { width:6px; }
  .zj-atmenu .at-list::-webkit-scrollbar-thumb { background:#2c2c33; border-radius:99px; }
  .zj-atmenu .at-empty { padding:14px 6px; text-align:center; font-size:12px; color:#63646b; line-height:1.6; }
  .zj-atmenu .at-item { display:flex; align-items:center; gap:11px; padding:8px 8px; border-radius:10px; cursor:pointer; transition:background .12s; }
  .zj-atmenu .at-item:hover, .zj-atmenu .at-item.kbd-active { background:rgba(255,255,255,.05); }
  .zj-atmenu .at-item.kbd-active { box-shadow:inset 0 0 0 1px rgba(60,214,245,.35); }
  /* 结果格图片加载失败态:显示占位 + 重试按钮(即梦式深灰卡内嵌) */
  .zj-cell .zj-cell-broken { display:none; }
  .zj-cell.img-broken .zj-cell-broken { position:absolute; inset:0; display:flex; flex-direction:column; align-items:center; justify-content:center;
    gap:8px; background:#1c1c22; color:#8a8b92; font-size:12px; z-index:2; }
  .zj-cell.img-broken .zj-cell-broken .ei { font-size:24px; opacity:.5; }
  .zj-cell.img-broken .zj-cell-broken .etxt { }
  .zj-cell.img-broken .zj-cell-broken .ebtn { font-size:11.5px; padding:5px 12px; border-radius:8px; background:#26262b;
    border:1px solid rgba(255,255,255,.12); color:#e8e8ea; cursor:pointer; font-family:inherit; margin-top:2px; transition:all .15s; }
  .zj-cell.img-broken .zj-cell-broken .ebtn:hover { border-color:rgba(60,214,245,.5); color:#7ae4ff; }
  .zj-cell.img-broken img { opacity:0; }
  .zj-atmenu .at-item img { width:36px; height:44px; border-radius:5px; object-fit:cover; flex-shrink:0; background:#1c1c22; }
  .zj-atmenu .at-item .at-item-body { flex:1; min-width:0; }
  .zj-atmenu .at-item .mn { font-size:12.5px; color:#f2f3f5; font-weight:500; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .zj-atmenu .at-item .md { font-size:10.5px; color:#8a8b92; margin-top:2px; }
  .zj-atmenu .at-item-del { width:22px; height:22px; border-radius:5px; display:grid; place-items:center; font-size:11px; color:#7c7d84;
    opacity:0; transition:all .15s; flex-shrink:0; cursor:pointer; }
  .zj-atmenu .at-item:hover .at-item-del { opacity:1; }
  .zj-atmenu .at-item-del:hover { background:rgba(239,68,68,.18); color:#fca5a5; }
  /* 参考图 role 徽标(zref 缩略图右下贴一个) */
  .zj-ref .zj-ref-role { position:absolute; bottom:2px; left:2px; right:2px; text-align:center; font-size:9.5px;
    font-weight:700; padding:1px 2px; border-radius:4px; background:rgba(16,16,18,.85); color:#e8e8ea; pointer-events:none;
    text-shadow:0 1px 2px rgba(0,0,0,.6); letter-spacing:.5px; }
  .zj-ref.role-model .zj-ref-role { color:#7ae4ff; }
  .zj-ref.role-garment .zj-ref-role { color:#ffcc80; }
  /* 视频模式:首帧图高亮边框 + 徽标粉色;补充参考图整体灰化透明,提示上游只吃首帧 */
  .zj-ref.first-frame { border-color:rgba(236,72,153,.65); box-shadow:0 0 0 1px rgba(236,72,153,.35), 0 4px 10px rgba(236,72,153,.15); }
  .zj-ref.first-frame:hover { border-color:#ec4899; box-shadow:0 0 0 1px rgba(236,72,153,.55), 0 6px 14px rgba(236,72,153,.25); }
  .zj-ref.first-frame .zj-ref-role.zj-first-frame { background:rgba(236,72,153,.9); color:#fff; text-shadow:none; }
  .zj-ref.extra-ref { opacity:.55; filter:saturate(.65); }
  .zj-ref.extra-ref:hover { opacity:.85; }
  .zj-ref.extra-ref .zj-role-hint.zj-extra-ref { background:rgba(60,60,70,.9); color:#c9c9d0; opacity:.9; pointer-events:none; }
  /* 换装模式提示条:检测到 @模特+@服装 时显示 */
  .zj-mode-hint { display:flex; align-items:center; gap:8px; margin-top:10px; padding:8px 12px; border-radius:10px;
    background:rgba(122,228,255,.08); border:1px solid rgba(60,214,245,.28); font-size:12px; color:#c8f2ff; }
  .zj-mode-hint .mh-ic { font-size:14px; }
  .zj-mode-hint .mh-x { margin-left:auto; cursor:pointer; color:#7c7d84; padding:0 4px; }
  .zj-mode-hint .mh-x:hover { color:#e8e8ea; }
  /* 移动端压缩 */
  @media (max-width:768px){
    body.ziyou-mode .canvas { padding:14px 12px 10px; }
    .zj-card { padding:12px 12px 10px; border-radius:15px; }
    .zj-card-main { gap:10px; }
    /* 移动端:chips 换行铺开,计价+发送作为末尾一组靠右(横滚+绝对定位方案会让计价文字压住 chip,已废弃) */
    .zj-bar { flex-wrap:wrap; gap:8px; align-items:center; }
    .zj-bar-right { margin-left:auto; display:flex; align-items:center; gap:8px; }
    .zj-cost { font-size:11px; line-height:1.25; text-align:right; }
    .zj-card { position:relative; }
    .zj-chip { height:33px; padding:0 11px; font-size:12px; }
    .zj-grid { grid-template-columns:repeat(var(--zj-count,1),var(--zj-mobile-cell-width,180px)); gap:var(--zj-mobile-grid-gap,12px); overflow-x:auto; overflow-y:hidden; overscroll-behavior-inline:contain; scrollbar-width:thin; }
    .zj-cell { width:var(--zj-mobile-cell-width,180px); height:auto; }
    .zj-hello { font-size:22px; margin-bottom:6px; }
    .zj-hello-sub { font-size:12.5px; margin-bottom:18px; }
    /* 小屏空间少:黄金位上移量减小,避免顶部大片空 */
    #zyComposer.centered { transform:translateY(-2vh); }
    /* @ popover 移动端宽度扩到 viewport */
    .zj-atmenu { width:calc(100vw - 32px); right:auto; left:0; }
  }
  /* 生成中可能同时出现多张大卡片：避免整卡渐变逐帧重绘，只保留小面积的合成层动画。 */
  .skeleton { border-radius:16px; aspect-ratio:1; border:1px solid var(--glass-bd); position:relative; overflow:hidden;
    background:radial-gradient(circle at 50% 43%,rgba(255,255,255,.065),rgba(255,255,255,.022) 56%,rgba(255,255,255,.012));
    contain:layout paint style; isolation:isolate;
    display:flex; flex-direction:column; align-items:center; justify-content:center; gap:16px; padding:20px; }
  .skeleton.detail-skel { aspect-ratio:3/4; }
  .skel-ring { position:relative; width:52px; height:52px; display:grid; place-items:center; }
  .skel-ring > svg { width:100%; height:100%; transform:rotate(-90deg); animation:skelRingSpin 2.4s linear infinite; will-change:transform; }
  .skel-ring circle { fill:none; stroke-width:3; }
  .skel-ring .skel-ring-bg { stroke:rgba(255,255,255,.08); }
  .skel-ring .skel-ring-fg { stroke:url(#skelGradStroke); stroke-linecap:round;
    stroke-dasharray:30 108; stroke-dashoffset:0; }
  @keyframes skelRingSpin { to { transform:rotate(270deg); } }
  .skel-spark { display:none; }
  .skel-ring .skel-icon { position:absolute; width:24px; height:24px; display:grid; place-items:center; color:var(--ink); opacity:.92; }
  .skel-ring .skel-ai-icon { width:24px; height:24px; display:block; stroke:currentColor; stroke-width:1.65; stroke-linecap:round; stroke-linejoin:round; }
  .skel-bar-track { width:72%; height:4px; border-radius:999px; background:rgba(255,255,255,.08); overflow:hidden; }
  .skel-bar-fill { width:100%; height:100%; border-radius:999px; background:var(--grad); transform-origin:left center; transform:scaleX(.04);
    animation:skelBarScale 45s linear forwards; will-change:transform; }
  @keyframes skelBarScale { to { transform:scaleX(.92); } }
  .skel-time { font-size:11px; color:#8f8fa7; font-variant-numeric:tabular-nums; letter-spacing:.02em; }
  .skel-phase { font-size:12px; color:rgba(255,255,255,.55); letter-spacing:.03em; margin-top:-4px; }
  /* 结果区会在单张成图返回时整体重建 DOM。结果卡若播放位移动画，会让所有历史卡片
     每返回一张图就一起下移再归位，形成整片画面抖动；普通结果卡始终保持静止。 */
  .rcard { border-radius:16px; overflow:hidden; border:1px solid var(--glass-bd); background:var(--glass); position:relative;
    animation:none; }
  .rcard.restored { animation:none; }
  /* 创作结果卡统一正方形 contain：竖图左右留白、横图上下留白；留白走 --slot-preview-matte。
     详情页长图单独保持自适应高度，避免方框把长页压扁。对比灯箱大图不走这套方卡。
     img 必须绝对铺满方框，对齐 .slot img：作为 grid 子项时 height:100% 会按原比例撑高，
     再被 overflow:hidden 裁掉下半身（竖图只剩上半身、腰部截断）。 */
  .rcard .rimg { aspect-ratio:1; position:relative; display:grid; place-items:center; overflow:hidden; background:var(--slot-preview-matte); }
  .rcard .rimg img { position:absolute; inset:0; width:100%; height:100%; object-fit:contain; object-position:center; background:var(--slot-preview-matte); }
  /* 透明底结果：棋盘格底色，让透明区域一眼可辨 */
  .rcard.is-transparent .rimg, .rcard.is-transparent .rimg img { background-color:#fff; background-image:linear-gradient(45deg,#d9d9de 25%,transparent 25%,transparent 75%,#d9d9de 75%),linear-gradient(45deg,#d9d9de 25%,transparent 25%,transparent 75%,#d9d9de 75%); background-size:16px 16px; background-position:0 0,8px 8px; }
  .rcard.detail-result .rimg { aspect-ratio:auto; min-height:240px; }
  .rcard.detail-result .rimg img { position:static; inset:auto; width:100%; height:auto; object-fit:contain; }
  .rcard .rimg .em { font-size:50px; }
  .rcard .rbadges { position:absolute; top:10px; left:10px; right:10px; z-index:3; display:flex; align-items:flex-start; justify-content:space-between; gap:7px; pointer-events:none; }
  .rcard .vtag { flex:0 1 auto; min-width:0; max-width:48%; font-size:11px; font-weight:700; padding:4px 10px; border-radius:999px;
    overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
    background:rgba(0,0,0,.5); backdrop-filter:blur(6px); color:#fff; }
  /* 功能来源 + 生成耗时角标:常驻右上角(「哪个功能生成的 · 跑了多久」);不抢点击 */
  .rcard .rmeta { flex:0 1 auto; min-width:0; margin-left:auto; font-size:10.5px; font-weight:700; padding:4px 9px; border-radius:999px;
    background:rgba(0,0,0,.55); backdrop-filter:blur(6px); color:rgba(255,255,255,.9); pointer-events:none;
    max-width:72%; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  /* .real-badge(「✨ 真实」徽标)第三百六十四轮删除:用户拍板不要,右上角只留"功能 · 耗时"角标 */
  .rcard .play-badge { position:absolute; top:50%; left:50%; transform:translate(-50%,-50%); width:54px; height:54px; border-radius:50%;
    background:rgba(0,0,0,.42); backdrop-filter:blur(6px); border:1.5px solid rgba(255,255,255,.6); display:grid; place-items:center;
    font-size:20px; color:#fff; z-index:2; pointer-events:none; transition:all .25s var(--ease); padding-left:4px; }
  .rcard:hover .play-badge { background:rgba(139,92,246,.7); transform:translate(-50%,-50%) scale(1.1); border-color:rgba(255,255,255,.9); }
  .r-open { position:absolute; inset:0; z-index:2; width:100%; height:100%; border:0; background:transparent; cursor:zoom-in; }
  .r-open:focus-visible { outline:2px solid #a78bfa; outline-offset:-3px; }
  .rcard .ract { position:absolute; inset:0; z-index:4; display:flex; align-items:flex-end; justify-content:center; gap:8px; padding:12px;
    background:none; opacity:0; pointer-events:none; transition:opacity .25s; }
  .rcard:hover .ract,.rcard:focus-within .ract { opacity:1; }
  /* 结果卡操作：文字小标签（下载/重新生成/重新编辑/删除），卡片窄时自动换行。 */
  .rcard .ract { flex-wrap:wrap; align-content:flex-end; gap:6px; padding:10px; }
  .ract .ra { box-sizing:border-box; height:28px; padding:0 10px; border-radius:8px; background:rgba(24,19,15,.74); backdrop-filter:blur(8px);
    display:inline-flex; align-items:center; font-family:inherit; font-size:12px; font-weight:600; line-height:1; white-space:nowrap; color:#fff; cursor:pointer; pointer-events:auto; transition:background .2s,transform .2s; border:1px solid rgba(255,255,255,.18); box-shadow:0 1px 4px rgba(0,0,0,.25); }
  .ract .ra:hover { background:#b8481f; border-color:#b8481f; transform:translateY(-1px); }
  .result-img-broken { display:none; position:absolute; inset:0; z-index:5; padding:22px; background:#141421; color:var(--ink-soft); text-align:center; align-content:center; justify-items:center; gap:8px; }
  .result-img-broken span { font-size:30px; }
  .result-img-broken b { color:var(--ink); font-size:13px; }
  .result-img-broken > div { display:flex; gap:8px; justify-content:center; }
  .result-img-broken button { margin-top:4px; border:1px solid var(--glass-bd); border-radius:9px; background:rgba(255,255,255,.08); color:#fff; padding:7px 12px; cursor:pointer; }
  .rcard.img-broken .result-img-broken { display:grid; }
  /* 第118轮 R5:失败卡真失败态——红色蒙层 + 错误文案,不再拿用户原图伪装成功图 */
  .rcard.failed { border:1px solid rgba(239,68,68,.5); }
  .rcard.failed .rimg { aspect-ratio:1; display:grid; place-items:center; background:linear-gradient(160deg, rgba(60,20,24,.9), rgba(30,12,16,.95)); min-height:200px; }
  .rcard.detail-result.failed .rimg { aspect-ratio:auto; min-height:240px; }
  .rcard .fail-overlay { position:absolute; inset:0; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:10px; padding:54px 22px 64px; text-align:center; }
  .rcard .fail-ic { width:34px; height:34px; border-radius:50%; border:2px solid currentColor; display:grid; place-items:center; color:#e07a5f; font-size:18px; font-weight:800; line-height:1; margin:0 auto; }
  .rcard .fail-msg { font-size:12.5px; line-height:1.5; color:#fca5a5; max-width:90%; display:-webkit-box; -webkit-line-clamp:4; -webkit-box-orient:vertical; overflow:hidden; word-break:break-word; }
  .rcard.failed .ract { background:none; }

  /* ============ 充值视图 ============ */
  #rechargeView { display:none; height:100%; overflow-y:auto; padding:34px 40px; overscroll-behavior:contain; }
  #rechargeView.show { display:block; }
  .rv-back { font-size:13px; font-weight:600; color:var(--ink-soft); background:var(--glass); border:1px solid var(--glass-bd);
    border-radius:10px; padding:8px 14px; cursor:pointer; margin-bottom:16px; font-family:inherit; transition:all .2s var(--ease); }
  .rv-back:hover { color:var(--ink); border-color:rgba(255,255,255,.28); transform:translateX(-2px); }
  .rv-head h1 { font-size:26px; font-weight:850; margin-bottom:6px; }
  .rv-head p { color:var(--ink-soft); font-size:14px; margin-bottom:28px; }
  .payment-success-notice { display:flex; align-items:center; gap:14px; margin:-10px 0 22px; padding:15px 18px; border:1px solid rgba(74,222,128,.38); border-radius:18px; background:linear-gradient(100deg,rgba(34,197,94,.18),rgba(16,185,129,.08)); box-shadow:0 14px 38px rgba(16,185,129,.10); }
  .payment-success-icon { display:grid; place-items:center; flex:0 0 auto; width:34px; height:34px; border-radius:50%; background:#22c55e; color:#06240f; font-size:21px; font-weight:900; }
  .payment-success-copy { display:grid; gap:3px; min-width:0; flex:1; }
  .payment-success-copy strong { color:#dcfce7; font-size:15px; }
  .payment-success-copy span { color:#bbf7d0; font-size:13px; }
  .payment-success-copy .payment-success-invite { justify-self:start; color:#86efac; font-size:12.5px; font-weight:700; text-decoration:none; margin-top:2px; }
  .payment-success-copy .payment-success-invite:hover { text-decoration:underline; }
  .payment-success-record { border:1px solid rgba(134,239,172,.36); border-radius:10px; padding:8px 11px; background:rgba(6,78,59,.24); color:#dcfce7; font:inherit; font-size:12px; font-weight:700; cursor:pointer; white-space:nowrap; }
  .payment-success-dismiss { border:0; padding:3px 7px; background:transparent; color:#86efac; font:inherit; font-size:23px; line-height:1; cursor:pointer; }
  .rv-grid { display:grid; grid-template-columns:1.4fr 1fr; gap:22px; margin-bottom:22px; }
  .wallet-support { display:flex; align-items:center; justify-content:space-between; gap:22px; margin-bottom:22px; background:linear-gradient(135deg,rgba(139,92,246,.14),rgba(34,211,238,.06)); }
  .wallet-support-copy { min-width:0; }
  .wallet-support-kicker { display:inline-block; color:var(--c3); font-size:11px; font-weight:800; letter-spacing:.08em; }
  .wallet-support h2 { margin:5px 0 6px; font-size:18px; font-weight:800; }
  .wallet-support p { margin:0; color:var(--ink-soft); font-size:13px; line-height:1.65; }
  .wallet-support-actions { display:flex; flex-direction:column; align-items:flex-end; gap:10px; flex:none; }
  .wallet-support-actions .btn { min-width:132px; }
  .wallet-support-wechat { display:flex; align-items:center; gap:10px; padding:9px 12px; border:1px solid rgba(196,181,253,.28); border-radius:14px; background:rgba(255,255,255,.06); }
  .wallet-support-wechat[hidden] { display:none; }
  .wallet-support-wechat-label { color:var(--ink-dim); font-size:11px; font-weight:700; letter-spacing:.08em; }
  .wallet-support-wechat strong { font-size:20px; font-weight:850; letter-spacing:.04em; font-variant-numeric:tabular-nums; }
  .wallet-support-wechat .btn { min-width:0; padding:7px 12px; }
  @media (max-width:760px){
    .wallet-support { flex-direction:column; align-items:stretch; }
    .wallet-support-actions { align-items:stretch; }
    .wallet-support-actions .btn { width:100%; }
  }
  .card { background:var(--glass); border:1px solid var(--glass-bd); border-radius:22px; padding:28px; backdrop-filter:blur(12px); }
  .bal-card { background:linear-gradient(150deg, rgba(167,139,250,.18), rgba(236,72,153,.10), rgba(34,211,238,.10)); }
  .wallet-invite { margin-top:28px; padding-top:24px; border-top:1px solid var(--glass-bd); }
  .wallet-invite-kicker { color:var(--ink-soft); font-size:11px; font-weight:800; letter-spacing:.08em; }
  .wallet-invite h2 { margin:6px 0 8px; font-size:22px; line-height:1.35; }
  .wallet-invite p { margin:0; color:var(--ink-soft); font-size:13px; line-height:1.7; }
  .wallet-invite-steps { display:grid; gap:14px; list-style:none; margin:20px 0; padding:0; }
  .wallet-invite-steps li { display:flex; align-items:flex-start; gap:10px; }
  .wallet-invite-steps li>span { display:grid; place-items:center; flex:0 0 26px; height:26px; border:1px solid var(--glass-bd); border-radius:50%; background:var(--glass); color:var(--ink); font-size:12px; font-weight:700; }
  .wallet-invite-steps strong { display:block; margin:2px 0 3px; font-size:13px; }
  .wallet-invite-steps p { font-size:12px; }
  .wallet-invite-footer { display:flex; align-items:center; flex-wrap:wrap; gap:12px; }
  .wallet-invite-footer .btn { min-height:44px; text-decoration:none; }
  .wallet-invite-footer>span { color:var(--ink-soft); font-size:12px; }
  .wallet-invite .wallet-invite-note { margin-top:14px; font-size:11px; }
  @media(max-width:760px){
    .wallet-invite h2 { font-size:20px; }
    .wallet-invite-footer { align-items:stretch; flex-direction:column; gap:8px; }
    .wallet-invite-footer .btn { justify-content:center; }
  }
  .bal-card .bl { font-size:13px; color:var(--ink-soft); margin-bottom:10px; }
  .bal-card .bv { font-size:46px; font-weight:850; letter-spacing:-1px; }
  .bal-card .bv small { font-size:18px; color:var(--ink-soft); font-weight:600; }
  .health { height:8px; border-radius:999px; background:rgba(255,255,255,.1); margin:20px 0 8px; overflow:hidden; }
  .health i { display:block; height:100%; width:62%; background:var(--grad); border-radius:999px; transition:width .5s var(--ease), background .5s var(--ease); }
  .bal-card .bh { font-size:12.5px; color:var(--ink-dim); }
  .stat-row { display:flex; gap:14px; }
  .stat { flex:1; text-align:center; background:var(--glass); border:1px solid var(--glass-bd); border-radius:16px; padding:18px; }
  .stat .sv { font-size:24px; font-weight:800; }
  .stat .sl { font-size:12px; color:var(--ink-dim); margin-top:4px; }
  .rv-grid2 { display:grid; grid-template-columns:1.3fr 1fr; gap:22px; margin-bottom:22px; }
  .chart-title { font-size:15px; font-weight:700; margin-bottom:22px; }
  .bars { display:flex; align-items:flex-end; gap:14px; min-height:170px; }
  .bar { flex:1; display:flex; flex-direction:column; align-items:center; gap:9px; }
  .bar i { width:62%; border-radius:7px 7px 0 0; background:var(--grad); transition:filter .2s; }
  .bar:hover i { filter:brightness(1.25); }
  .bar span { font-size:11px; color:var(--ink-dim); }
  .dist-row { margin-bottom:18px; }
  .dist-row:last-child { margin-bottom:0; }
  .dist-row .dl { display:flex; justify-content:space-between; font-size:13px; color:var(--ink-soft); margin-bottom:8px; }
  .dist-row .track { height:8px; border-radius:999px; background:rgba(255,255,255,.08); overflow:hidden; }
  .dist-row .track i { display:block; height:100%; border-radius:999px; background:var(--grad); }
  .desktop-buy { margin-bottom:22px; background:linear-gradient(145deg,rgba(139,92,246,.14),rgba(34,211,238,.06)); }
  .desktop-page-head { display:none; margin-bottom:22px; }
  .desktop-page-head h1 { margin:7px 0 8px; font-size:28px; }
  .desktop-page-head>p { margin:0; color:var(--ink-soft); line-height:1.7; }
  .desktop-page-points { display:flex; flex-wrap:wrap; gap:9px; margin-top:14px; }
  .desktop-page-points span { padding:7px 10px; border:1px solid rgba(125,255,196,.2); border-radius:999px; background:rgba(125,255,196,.07); color:var(--ink-soft); font-size:11.5px; }
  body.desktop-commerce-mode #rechargeView .desktop-page-head { display:block; }
  body.desktop-commerce-mode #rechargeView>.rv-head,
  body.desktop-commerce-mode #rechargeView>.rv-grid,
  body.desktop-commerce-mode #rechargeView>.ledger { display:none !important; }
  body.desktop-commerce-mode #desktopBuySection { margin-top:0; }
  body:not(.desktop-commerce-mode) #desktopBuySection { display:none; }
  .desktop-buy-head, .desktop-renew-banner, #desktopPlanGrid { display:none !important; }
  .desktop-buy-head { display:flex; justify-content:space-between; align-items:flex-start; gap:20px; margin-bottom:20px; }
  .desktop-buy-head h2 { margin:5px 0 6px; font-size:22px; }
  .desktop-buy-head p { margin:0; color:var(--ink-soft); font-size:13px; line-height:1.7; }
  .desktop-buy-kicker { color:var(--c3); font-size:11px; font-weight:800; letter-spacing:.08em; }
  .desktop-buy-badge { flex:none; padding:8px 12px; border:1px solid rgba(110,231,183,.32); border-radius:999px; background:rgba(16,185,129,.10); color:#6ee7b7; font-size:12px; font-weight:800; }
  .desktop-plan-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:12px; }
  .desktop-plan-grid.single-plan { grid-template-columns:minmax(280px,640px); justify-content:center; }
  .desktop-plan { display:flex; flex-direction:column; min-height:210px; padding:18px; border:1px solid var(--glass-bd); border-radius:17px; background:var(--glass); }
  .desktop-plan.featured { border-color:rgba(139,92,246,.52); box-shadow:0 14px 40px rgba(90,52,210,.12); }
  .desktop-plan h3 { margin:0; font-size:16px; }.desktop-plan .dp-duration { margin-top:4px; color:var(--ink-dim); font-size:12px; }
  .desktop-plan .dp-price { margin:18px 0 5px; font-size:29px; font-weight:850; }.desktop-plan .dp-price small { font-size:13px; color:var(--ink-soft); }
  .desktop-plan p { flex:1; margin:0 0 16px; color:var(--ink-soft); font-size:12px; line-height:1.65; }
  .desktop-license-mine { margin-top:18px; }.desktop-license-mine h3 { margin:0 0 10px; font-size:14px; }
  .desktop-license-item { display:flex; align-items:center; gap:12px; padding:12px 14px; border:1px solid var(--glass-bd); border-radius:13px; background:var(--glass); }
  .desktop-license-item+.desktop-license-item { margin-top:8px; }.desktop-license-item>div { flex:1; min-width:0; }
  .desktop-license-item code { display:block; overflow:hidden; text-overflow:ellipsis; color:var(--ink); font-size:12px; white-space:nowrap; user-select:text; }
  .desktop-license-item small { display:block; margin-top:4px; color:var(--ink-dim); }
  .desktop-license-actions { display:flex; flex-wrap:wrap; gap:8px; }
  .desktop-renew-banner { display:flex; justify-content:space-between; align-items:center; gap:12px; margin-bottom:14px; padding:12px 14px; border:1px solid rgba(251,191,36,.28); border-radius:13px; background:rgba(251,191,36,.08); color:var(--ink-soft); font-size:12.5px; }
  .desktop-renew-banner[hidden] { display:none; }
  .desktop-renew-banner b { color:var(--ink); }
  .desktop-license-item.is-expiring { border-color:rgba(251,191,36,.28); background:rgba(251,191,36,.055); }
  .desktop-license-item.is-expired { border-color:rgba(252,165,165,.28); background:rgba(252,165,165,.05); }
  .desktop-download-panel { margin-top:18px; padding:18px; border:1px solid rgba(125,255,196,.25); border-radius:16px; background:rgba(125,255,196,.055); }
  .desktop-download-panel[hidden] { display:none; }
  .desktop-download-panel-head { display:flex; align-items:flex-start; justify-content:space-between; gap:18px; margin-bottom:14px; }
  .desktop-download-panel-head h3 { margin:4px 0 5px; font-size:17px; }.desktop-download-panel-head p { margin:0; color:var(--ink-soft); font-size:12.5px; }
  .desktop-download-secure { flex:none; padding:6px 10px; border:1px solid rgba(125,255,196,.24); border-radius:999px; color:#7dffc4; font-size:11px; }
  .desktop-download-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:10px; }.desktop-download-grid .btn { padding:12px 10px; font-size:12px; }
  .desktop-download-version { margin-top:10px; color:var(--ink-dim); font-size:11px; text-align:right; }
  .desktop-license-delivery { margin:18px 0 4px; padding:16px; border:1px solid rgba(125,255,196,.28); border-radius:15px; background:rgba(125,255,196,.07); }
  .desktop-license-delivery span { display:block; margin-bottom:7px; color:var(--ink-dim); font-size:11px; }
  .desktop-license-delivery code { display:block; overflow-wrap:anywhere; color:var(--ink); font-size:17px; font-weight:800; letter-spacing:.04em; user-select:text; }
  @media (max-width:900px){ .desktop-plan-grid{grid-template-columns:1fr}.desktop-plan{min-height:0} }
  @media (max-width:760px){ .desktop-buy-head,.desktop-download-panel-head{flex-direction:column}.desktop-license-item{align-items:flex-start;flex-direction:column}.desktop-license-actions,.desktop-license-item .btn{width:100%}.desktop-page-head h1{font-size:24px}.desktop-download-grid{grid-template-columns:1fr}.desktop-download-secure{align-self:flex-start} }
  @media (max-width:760px){ .rv-grid2 { grid-template-columns:1fr; } }

  /* ============ 供应商管理面板(第二百轮阶段 1)============ */
  /* overscroll-behavior:contain 阻止顶部继续下拉触发浏览器 swipe-back(macOS 触控板下滑返回上一页的老坑) */
  /* position:relative + z-index:1 是第二百一十六轮加的防御——即使未来结构上出错,此面板也建立自己的 stacking context,
     不再被同层 fixed 兄弟(比如 .main 空壳)吞事件。DOM 结构应保证 providerView 在 .main 内,这里的 z-index 只是保险。 */
  #providerView { display:none; height:100%; overflow-y:auto; padding:34px 40px;
                  overscroll-behavior:contain; position:relative; z-index:1; }
  #providerView.show { display:block; }
  #pricingView { display:none; height:100%; overflow-y:auto; padding:34px 40px;
    background:radial-gradient(1200px 800px at 10% -10%, rgba(34,211,238,.10), transparent 60%), var(--bg); }
  #pricingView.show { display:block; }
  /* ============ 桌面端经营管理 ============
     总览 / 订单 / 授权三个分区。语义色走面板内的 --dco-* token，白天夜间各一套；
     字阶只保留 26 / 15 / 13 / 12 / 11.5 五档，列表不做嵌套滚动。 */
  #desktopLicenseAdminView {
    --dco-ok:#7dffc4; --dco-ok-bg:rgba(125,255,196,.10); --dco-ok-bd:rgba(125,255,196,.26);
    --dco-warn:#fbbf24; --dco-warn-bg:rgba(251,191,36,.10); --dco-warn-bd:rgba(251,191,36,.26);
    --dco-bad:#fca5a5; --dco-bad-bg:rgba(252,165,165,.10); --dco-bad-bd:rgba(252,165,165,.26);
    --dco-info:#a78bfa; --dco-info-bg:rgba(167,139,250,.12); --dco-info-bd:rgba(167,139,250,.30);
    --dco-surface:var(--glass); --dco-surface-bd:var(--glass-bd);
    --dco-code-bg:rgba(0,0,0,.22); --dco-hover:rgba(255,255,255,.055); --dco-bar:linear-gradient(180deg,#a78bfa,#7c3aed);
    display:none; height:100%; overflow-y:auto; padding:24px 40px 56px;
    background:radial-gradient(1100px 760px at 8% -12%,rgba(139,92,246,.10),transparent 60%),var(--bg);
    font-variant-numeric:tabular-nums;
  }
  #desktopLicenseAdminView.show { display:block; }
  html[data-theme="light"] #desktopLicenseAdminView {
    --dco-ok:#047857; --dco-ok-bg:rgba(16,185,129,.10); --dco-ok-bd:rgba(16,185,129,.30);
    --dco-warn:#b45309; --dco-warn-bg:rgba(245,158,11,.12); --dco-warn-bd:rgba(245,158,11,.34);
    --dco-bad:#b91c1c; --dco-bad-bg:rgba(239,68,68,.08); --dco-bad-bd:rgba(239,68,68,.26);
    --dco-info:#5b21b6; --dco-info-bg:rgba(91,33,182,.07); --dco-info-bd:rgba(91,33,182,.22);
    --dco-surface:#fff; --dco-surface-bd:#e8e8e8;
    --dco-code-bg:#f6f6f6; --dco-hover:rgba(0,0,0,.028); --dco-bar:linear-gradient(180deg,#52525b,#111);
    background:var(--bg);
  }
  /* 头部：标题、刷新和分区标签。标签栏吸顶，滚动时始终知道自己在哪个分区。 */
  .dco-head-main { display:flex; align-items:flex-end; justify-content:space-between; gap:24px; }
  .dco-head-copy h1 { color:var(--ink); font-size:26px; font-weight:850; letter-spacing:-.02em; }
  .dco-head-copy p { max-width:64ch; margin-top:7px; color:var(--ink-soft); font-size:13.5px; }
  .dco-head-side { display:flex; flex:none; align-items:center; gap:12px; }
  .dco-fresh { color:var(--ink-dim); font-size:11.5px; }
  .dco-refresh { display:inline-flex; align-items:center; gap:6px; padding:8px 14px; border:1px solid var(--dco-surface-bd); border-radius:10px; background:var(--dco-surface); color:var(--ink-soft); font-family:inherit; font-size:12.5px; font-weight:600; cursor:pointer; transition:color .16s var(--ease),border-color .16s var(--ease); }
  .dco-refresh:hover { color:var(--ink); border-color:var(--ink-dim); }
  /* 忙态通用化:原来只定义在 .dco-refresh 上,而桌面分区刷新按钮实际 class 是 .btn.btn-ghost,
     is-busy 从未生效。统一挂到 .btn / .pv-btn,所有管理页刷新按钮都能用。 */
  .btn.is-busy, .pv-btn.is-busy, .dco-refresh.is-busy { pointer-events:none; opacity:.55; }
  @keyframes dco-spin { to { transform:rotate(360deg); } }
  /* top 抵掉 body.admin-mode 给视图加的 24px padding-top，否则吸顶后会悬空 24px */
  .dco-tabs { position:sticky; top:-24px; z-index:6; display:flex; gap:24px; margin:20px -40px 22px; padding:0 40px; border-bottom:1px solid var(--glass-bd); background:color-mix(in srgb,var(--bg) 90%,transparent); backdrop-filter:blur(14px); }
  .dco-tab { position:relative; padding:11px 0 12px; border:0; background:none; color:var(--ink-dim); font-family:inherit; font-size:13.5px; font-weight:650; cursor:pointer; transition:color .16s var(--ease); }
  .dco-tab:hover { color:var(--ink-soft); }
  .dco-tab.is-active { color:var(--ink); }
  .dco-tab::after { content:''; position:absolute; right:0; bottom:-1px; left:0; height:2px; border-radius:2px; background:transparent; transition:background .16s var(--ease); }
  .dco-tab.is-active::after { background:var(--ink); }
  .dco-tab-count { margin-left:7px; padding:2px 6px; border-radius:6px; background:var(--dco-warn-bg); color:var(--dco-warn); font-size:11px; font-weight:700; }
  .dco-panel[hidden] { display:none; }
  .dco-panel { animation:dco-rise .18s var(--ease); }
  @keyframes dco-rise { from { opacity:0; transform:translateY(4px); } to { opacity:1; transform:none; } }
  /* 经营总览：四个核心指标，可下钻的做成按钮 */
  .dco-kpis { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:12px; margin-bottom:12px; }
  .dco-kpi { position:relative; display:block; width:100%; padding:16px 18px; border:1px solid var(--dco-surface-bd); border-radius:14px; background:var(--dco-surface); font-family:inherit; text-align:left; }
  button.dco-kpi { cursor:pointer; transition:border-color .16s var(--ease),background .16s var(--ease); }
  button.dco-kpi:hover { border-color:var(--ink-dim); background:var(--dco-hover); }
  button.dco-kpi::after { content:'→'; position:absolute; top:15px; right:16px; color:var(--ink-dim); font-size:12px; opacity:0; transition:opacity .16s var(--ease),transform .16s var(--ease); }
  button.dco-kpi:hover::after { opacity:1; transform:translateX(2px); }
  .dco-kpi>span { display:block; color:var(--ink-dim); font-size:12px; }
  .dco-kpi>b { display:block; margin-top:7px; color:var(--ink); font-size:26px; font-weight:800; letter-spacing:-.015em; white-space:nowrap; }
  .dco-kpi>small { display:block; margin-top:7px; color:var(--ink-dim); font-size:11.5px; }
  .dco-kpi.money>b { color:var(--dco-ok); }
  .dco-grid { display:grid; grid-template-columns:minmax(0,1.35fr) minmax(320px,.65fr); gap:12px; }
  .dco-card { padding:18px 20px; border:1px solid var(--dco-surface-bd); border-radius:16px; background:var(--dco-surface); }
  .dco-card-head { display:flex; align-items:flex-start; justify-content:space-between; gap:14px; margin-bottom:14px; }
  .dco-card-head h2 { display:flex; align-items:center; gap:8px; color:var(--ink); font-size:15px; font-weight:700; }
  .dco-card-head p { margin-top:5px; color:var(--ink-dim); font-size:12px; }
  .dco-card-aside { flex:none; color:var(--ink-soft); font-size:12px; white-space:nowrap; }
  .dco-head-count { padding:2px 7px; border-radius:6px; background:var(--dco-warn-bg); color:var(--dco-warn); font-size:11.5px; font-weight:700; }
  .dco-link { flex:none; padding:0; border:0; background:none; color:var(--ink-soft); font-family:inherit; font-size:12.5px; font-weight:600; cursor:pointer; white-space:nowrap; transition:color .16s var(--ease); }
  .dco-link:hover { color:var(--ink); }
  /* 收入柱状图：横轴只标首/中/尾三个日期，不再给每根柱子挂 8px 小字 */
  .dco-chart { position:relative; }
  .dco-bars { display:flex; align-items:flex-end; gap:3px; height:150px; padding-top:8px; border-bottom:1px solid var(--glass-bd); }
  .dco-bar { display:flex; flex:1; align-items:flex-end; justify-content:center; min-width:2px; height:100%; }
  .dco-bar i { display:block; width:100%; max-width:16px; min-height:2px; border-radius:4px 4px 2px 2px; background:var(--glass-2); transition:opacity .16s var(--ease); }
  .dco-bar i.on { background:var(--dco-bar); }
  .dco-bar:hover i { opacity:.7; }
  .dco-axis { display:flex; justify-content:space-between; margin-top:8px; color:var(--ink-dim); font-size:11.5px; }
  .dco-chart-empty { position:absolute; inset:56px 0 auto; color:var(--ink-dim); font-size:12px; text-align:center; pointer-events:none; }
  .dco-plan-mix:not(:empty) { display:flex; flex-wrap:wrap; gap:8px; margin-top:15px; padding-top:15px; border-top:1px solid var(--glass-bd); }
  .dco-plan { display:inline-flex; align-items:baseline; gap:8px; padding:6px 11px; border:1px solid var(--dco-surface-bd); border-radius:999px; color:var(--ink-dim); font-size:12px; }
  .dco-plan b { color:var(--ink-soft); font-weight:650; }
  /* 到期提醒 */
  .dco-reminders { max-height:252px; overflow:auto; overscroll-behavior:contain; }
  .dco-reminder { display:flex; align-items:center; justify-content:space-between; gap:12px; padding:11px 0; border-top:1px solid var(--glass-bd); }
  .dco-reminder:first-child { border-top:0; padding-top:0; }
  .dco-reminder>div:first-child { min-width:0; }
  .dco-reminder b { color:var(--ink); font-size:13px; font-weight:650; }
  .dco-reminder small { display:block; overflow:hidden; margin-top:4px; color:var(--ink-dim); font-size:11.5px; text-overflow:ellipsis; white-space:nowrap; }
  .dco-tag { display:inline-block; margin-right:8px; padding:3px 7px; border-radius:6px; background:var(--dco-warn-bg); color:var(--dco-warn); font-size:11px; font-weight:700; }
  .dco-reminder.expired .dco-tag { background:var(--dco-bad-bg); color:var(--dco-bad); }
  .dco-reminder-actions { display:flex; flex:none; gap:6px; }
  /* 订单 / 授权：共用同一套筛选栏、结果说明和行卡片 */
  /* 与 .pv-toolbar 同参数(gap/margin/对齐),桌面分区的筛选条不再自成一派 */
  .dco-toolbar { display:flex; flex-wrap:wrap; gap:10px; align-items:center; margin-bottom:16px; }
  .dco-search { flex:1; min-width:260px; }
  .dco-result { display:flex; flex-wrap:wrap; gap:6px 18px; margin-bottom:12px; color:var(--ink-dim); font-size:12px; }
  .dco-result b { margin-left:5px; color:var(--ink-soft); font-weight:650; }
  .dco-result .warn b { color:var(--dco-warn); }
  .dco-result .bad b { color:var(--dco-bad); }
  .dco-list { display:grid; gap:10px; }
  .dco-row { padding:15px 17px; border:1px solid var(--dco-surface-bd); border-radius:14px; background:var(--dco-surface); transition:border-color .16s var(--ease); }
  .dco-row:hover { border-color:var(--ink-dim); }
  .dco-row-head { display:flex; align-items:flex-start; justify-content:space-between; gap:14px; }
  .dco-row-title { display:flex; flex-wrap:wrap; align-items:center; gap:9px; min-width:0; }
  .dco-row-title b { color:var(--ink); font-size:14px; font-weight:700; }
  .dco-row-title code { color:var(--ink-dim); font-family:ui-monospace,SFMono-Regular,Menlo,monospace; font-size:12px; user-select:text; overflow-wrap:anywhere; }
  .dco-row-sub { overflow:hidden; margin-top:6px; color:var(--ink-soft); font-size:12.5px; text-overflow:ellipsis; white-space:nowrap; }
  .dco-row-actions { display:flex; flex:none; flex-wrap:wrap; justify-content:flex-end; gap:6px; }
  .dco-row-actions .pv-select { padding:6px 9px; font-size:12px; }
  .dco-row-meta { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:11px 18px; margin-top:14px; padding-top:13px; border-top:1px solid var(--glass-bd); }
  .dco-row-meta>div { min-width:0; }
  .dco-row-meta>.dco-wide { grid-column:span 2; }
  .dco-row-meta span { display:block; color:var(--ink-dim); font-size:11.5px; }
  .dco-row-meta b,.dco-row-meta code { display:block; overflow:hidden; margin-top:3px; color:var(--ink-soft); font-size:12.5px; font-weight:600; text-overflow:ellipsis; white-space:nowrap; }
  .dco-row-meta code { font-family:ui-monospace,SFMono-Regular,Menlo,monospace; }
  .dco-pill { flex:none; padding:4px 9px; border:1px solid var(--dco-surface-bd); border-radius:999px; color:var(--ink-soft); font-size:11.5px; font-weight:700; }
  .dco-pill.ok { border-color:var(--dco-ok-bd); background:var(--dco-ok-bg); color:var(--dco-ok); }
  .dco-pill.warn { border-color:var(--dco-warn-bd); background:var(--dco-warn-bg); color:var(--dco-warn); }
  .dco-pill.bad { border-color:var(--dco-bad-bd); background:var(--dco-bad-bg); color:var(--dco-bad); }
  .dco-pill.info { border-color:var(--dco-info-bd); background:var(--dco-info-bg); color:var(--dco-info); }
  .dco-more { width:100%; padding:12px; border:1px dashed var(--dco-surface-bd); border-radius:12px; background:none; color:var(--ink-soft); font-family:inherit; font-size:12.5px; font-weight:600; cursor:pointer; transition:color .16s var(--ease),border-color .16s var(--ease); }
  .dco-more:hover { color:var(--ink); border-color:var(--ink-dim); }
  /* 空态与 .pv-empty 同一套观感(玻璃底 + 虚线框 + 16px 圆角),九个分区不再两副面孔 */
  .dco-loading,.dco-empty { padding:40px; border:1px dashed var(--glass-bd); border-radius:16px; background:var(--glass); color:var(--ink-dim); font-size:13px; text-align:center; }
  .dco-empty.bad { border-color:var(--dco-bad-bd); color:var(--dco-bad); }
  /* 手动发码面板与授权卡片改到 assets/css/admin/12-licenses-codes.css，
     那边只服务「授权」分区；本文件保留总览 / 订单共用的骨架。 */
  @media (prefers-reduced-motion:reduce){ .dco-panel { animation:none; } .dco-refresh.is-busy>span { animation:none; } }
  @media (max-width:1180px){
    .dco-kpis{grid-template-columns:repeat(2,1fr)}.dco-grid{grid-template-columns:1fr}
    .dco-row-meta{grid-template-columns:repeat(2,1fr)}
  }
  @media (max-width:760px){
    #desktopLicenseAdminView{padding:20px 18px 40px}
    .dco-head-main{align-items:flex-start;flex-direction:column;gap:14px}
    .dco-tabs{gap:18px;margin:18px -18px 20px;padding:0 18px}
    .dco-kpis{grid-template-columns:1fr}
    .dco-search{width:100%;min-width:100%}
    .dco-row-head{align-items:stretch;flex-direction:column}.dco-row-actions{justify-content:flex-start}
    .dco-row-meta{grid-template-columns:1fr}.dco-row-meta>.dco-wide{grid-column:auto}
    .dco-reminder{align-items:flex-start;flex-direction:column}.dco-reminder-actions{width:100%}.dco-reminder-actions>*{flex:1}
  }
  .retail-model-card { padding:0; overflow:hidden; }
  .retail-tier-list { display:grid; }
  @media (max-width:760px){
    #pricingView { padding:20px; }
  }
  /* 本轮重做:pv-tabbar 已删,总览/供应商/模型/调用直接走左侧导航(各占独立 hash) */
  .admin-nav-btn:focus-visible, .pv-btn:focus-visible, .btn:focus-visible, .rv-back:focus-visible {
    outline:2px solid var(--c3); outline-offset:3px; }
  :where(a,button,input,textarea,select,[role="button"],[role="radio"],[role="tab"],[tabindex]):focus-visible { outline:2px solid var(--c3); outline-offset:3px; }
  /* AI 画布的 textarea 已由整张 composer 卡片用 focus-within 提示当前焦点。
     避免全站焦点规则再叠一圈高亮青色矩形,恢复原本柔和的一体化输入体验。 */
  body.ziyou-mode .zj-input:focus-visible { outline:none; }
  .sr-only { position:absolute !important; width:1px !important; height:1px !important; padding:0 !important; margin:-1px !important; overflow:hidden !important; clip:rect(0,0,0,0) !important; white-space:nowrap !important; border:0 !important; }
  .pv-toolbar { display:flex; gap:10px; align-items:center; margin-bottom:16px; flex-wrap:wrap; }
  .pv-req { color:#ec4899; }
  .pv-select, .pv-input { background:var(--glass); border:1px solid var(--glass-bd); border-radius:10px; padding:8px 12px; color:var(--ink); font-family:inherit; font-size:13px; }
  .pv-select:focus, .pv-input:focus { border-color:var(--c1); outline:none; }
  .pv-list { display:flex; flex-direction:column; gap:12px; }
  .pv-card { background:var(--glass); border:1px solid var(--glass-bd); border-radius:16px; padding:20px; transition:border-color .2s; }
  .pv-card:hover { border-color:rgba(255,255,255,.16); }
  .pv-name { font-size:16px; font-weight:700; }
  .pv-code { font-size:12px; color:var(--ink-dim); font-family:ui-monospace,SFMono-Regular,Menlo,monospace; margin-top:2px; }
  .pv-badge { display:inline-block; font-size:11px; padding:3px 8px; border-radius:6px; font-weight:600; }
  .pv-badge.enabled { background:rgba(125,255,196,.15); color:#7dffc4; }
  .pv-badge.disabled { background:rgba(255,255,255,.08); color:var(--ink-dim); }
  .pv-badge.failover_only { background:rgba(251,191,36,.15); color:#fbbf24; }
  .pv-badge.k-image_generate { background:rgba(167,139,250,.15); color:#a78bfa; }
  .pv-badge.k-image_analyze { background:rgba(34,211,238,.15); color:#22d3ee; }
  .pv-badge.k-video_generate { background:rgba(236,72,153,.15); color:#ec4899; }
  .pv-badge.k-llm_analyze { background:rgba(125,255,196,.12); color:#7dffc4; }
  .pv-btn { background:var(--glass); border:1px solid var(--glass-bd); border-radius:8px; padding:6px 12px; font-size:12.5px; color:var(--ink-soft); cursor:pointer; font-family:inherit; transition:all .2s var(--ease); }
  .pv-btn:hover { color:var(--ink); border-color:rgba(255,255,255,.28); }
  .pv-btn.danger:hover { color:#fca5a5; border-color:rgba(252,165,165,.4); }
  .pv-empty { padding:40px; text-align:center; color:var(--ink-dim); font-size:13px; background:var(--glass); border:1px dashed var(--glass-bd); border-radius:16px; }
  .pv-probe-result { margin-top:12px; padding:10px 14px; background:rgba(255,255,255,.03); border:1px solid var(--glass-bd); border-radius:10px; font-size:12.5px; }
  .pv-probe-result code { color:var(--ink); font-family:ui-monospace,SFMono-Regular,Menlo,monospace; font-size:12px; }
  .pv-probe-body { margin-top:6px; }
  .pv-probe-hint { margin-top:8px; color:var(--ink-dim); font-size:11.5px; }
  .pv-probe-spinning { color:var(--c3); }

  /* 第二百一十八轮:失败信息中文化 */
  .pv-recent-cn { color:var(--ink); font-size:12.5px; margin-top:8px; line-height:1.6; }
  .pv-recent-cn b { color:#fca5a5; font-weight:700; }
  .pv-recent-hint { color:var(--ink-soft); font-size:12px; margin-top:6px; line-height:1.6; padding:6px 10px; background:rgba(251,191,36,.06); border-left:2px solid rgba(251,191,36,.35); border-radius:4px; }
  .pv-recent-raw { margin-top:8px; font-size:11.5px; color:var(--ink-dim); }
  .pv-recent-raw summary { cursor:pointer; color:var(--ink-soft); user-select:none; }
  .pv-recent-raw summary:hover { color:var(--ink); }
  .pv-recent-raw code { display:block; margin-top:6px; padding:8px 10px; background:rgba(0,0,0,.35); border-radius:6px; font-family:ui-monospace,SFMono-Regular,Menlo,monospace; font-size:11.5px; color:#fca5a5; word-break:break-all; white-space:pre-wrap; }

  /* 解析模型 / 思考档位下拉:跟着供应商行走,行本身的样式已迁到 admin/02-providers.css */
  .pv-analysis-controls { display:inline-flex; align-items:center; gap:8px; flex-wrap:wrap; }
  .pv-analysis-controls > small { color:var(--ink-dim); white-space:nowrap; font-size:11px; }
  .pv-analysis-model-control { display:inline-flex; align-items:center; gap:8px; padding:6px 9px; background:rgba(167,139,250,.08); border:1px solid rgba(167,139,250,.24); border-radius:9px; color:var(--ink-soft); font-size:11.5px; }
  .pv-analysis-model-control select { min-width:220px; border:1px solid rgba(167,139,250,.38); border-radius:7px; background:#161225; color:var(--ink); padding:7px 30px 7px 10px; font:inherit; font-weight:650; outline:none; cursor:pointer; }
  .pv-analysis-thinking-control select { min-width:145px; }
  .pv-analysis-model-control select:focus { border-color:#a78bfa; box-shadow:0 0 0 2px rgba(167,139,250,.15); }
  .pv-analysis-model-control select:disabled { opacity:.55; cursor:wait; }

  /* 第二百五十轮:快捷停/启按钮(所在的 provider block 已随总览页重构删除) */
  .pv-kind-toggle-btn { margin-left:auto; padding:3px 10px; border-radius:6px; font-size:11px; font-weight:600; cursor:pointer; border:1px solid var(--glass-bd); background:rgba(255,255,255,.05); color:var(--ink-soft); transition:background .12s, border-color .12s, color .12s; }
  .pv-kind-toggle-btn:hover { background:rgba(252,165,165,.15); border-color:rgba(252,165,165,.35); color:#fca5a5; }
  .pv-kind-toggle-btn.enable { background:rgba(125,255,196,.1); border-color:rgba(125,255,196,.28); color:#7dffc4; }
  .pv-kind-toggle-btn.enable:hover { background:rgba(125,255,196,.22); }
  .pv-kind-toggle-btn:disabled { opacity:.5; cursor:wait; }

  /* 第二百五十二轮:用户管理面板 —— 与 providerView 同款布局约定 */
  #userView { display:none; height:100%; overflow-y:auto; padding:34px 40px;
    background:radial-gradient(1200px 800px at 10% -10%, rgba(99,102,241,0.14), transparent 60%), var(--bg); }
  #userView.show { display:block; }
  @media (max-width:760px){ #userView { padding:20px; } }
  /* 运营控制台重做:审计流水独立页(原为用户管理里的弹窗) */
  #promptView { display:none; height:100%; overflow-y:auto; padding:34px 40px; }
  #promptView.show { display:block; }
  @media (max-width:760px){ #promptView { padding:20px; } }
  /* 经营分析独立页:基础显隐同其它后台页,页内样式在 admin/22-analytics.css */
  #analyticsView { display:none; height:100%; overflow-y:auto; padding:34px 40px; overscroll-behavior:contain; }
  #analyticsView.show { display:block; }
  /* 邀请返利后台(#/invites) */
  #inviteAdminView { display:none; height:100%; overflow-y:auto; padding:34px 40px; overscroll-behavior:contain; }
  #inviteAdminView.show { display:block; }
  @media (max-width:760px){ #inviteAdminView { padding:20px; } }
  /* 邀请返利组件统一使用 admin/26-invites.css。 */
  @media (max-width:760px){ #analyticsView { padding:20px; } }
  #auditView { display:none; height:100%; overflow-y:auto; padding:34px 40px;
    background:radial-gradient(1200px 800px at 10% -10%, rgba(56,189,248,.10), transparent 60%), var(--bg);
    overscroll-behavior:contain; }
  #auditView.show { display:block; }
  #auditView #auditLogList { margin-top:16px; min-width:0; }
  @media (max-width:760px){ #auditView { padding:20px; } }
  #officialAssetView { display:none; height:100%; min-width:0; overflow-y:auto; overflow-x:hidden; padding:30px clamp(20px,3.2vw,48px);
    background:radial-gradient(1100px 700px at 15% -10%, rgba(99,102,241,.13), transparent 62%),var(--bg); }
  #officialAssetView.show { display:block; }
  .official-assets-head { max-width:1120px; }
  .official-assets-head h1 { display:flex; align-items:center; gap:10px; font-size:clamp(25px,3vw,34px); }
  .official-assets-head p { max-width:900px; margin-bottom:12px; line-height:1.7; white-space:normal; overflow-wrap:anywhere; }
  .official-assets-head-actions { display:flex; align-items:center; gap:9px; margin-bottom:20px; }
  .official-assets-notice { margin:0 0 16px; padding:13px 15px; border:1px solid rgba(251,191,36,.28); border-radius:12px; background:rgba(251,191,36,.07); color:var(--ink-soft); font-size:13px; line-height:1.6; }
  .official-assets-upload { margin:0 0 16px; padding:0; overflow:hidden; }
  .official-assets-upload summary { min-height:66px; display:flex; align-items:center; justify-content:space-between; gap:16px; padding:15px 18px; cursor:pointer; list-style:none; }
  .official-assets-upload summary::-webkit-details-marker { display:none; }
  .official-assets-upload summary span { display:grid; gap:4px; }.official-assets-upload summary b { color:var(--ink); font-size:14px; }.official-assets-upload summary small { color:var(--ink-dim); font-size:11.5px; }
  .official-assets-upload summary i { color:var(--ink-dim); font-size:11px; font-style:normal; }.official-assets-upload[open] summary i::before { content:'收起'; font-size:11px; }.official-assets-upload[open] summary i { font-size:0; }
  .official-assets-upload-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:12px; padding:0 18px 18px; border-top:1px solid var(--glass-bd); padding-top:16px; align-items:end; }
  .official-assets-upload-grid label { display:grid; gap:6px; color:var(--ink-dim); font-size:11.5px; }
  .official-assets-extra-field { align-self:end; min-width:0; border:1px solid var(--glass-bd); border-radius:10px; background:var(--glass); }
  .official-assets-extra-field>summary { min-height:40px; display:flex; align-items:center; padding:9px 11px; color:var(--ink-dim); font-size:11.5px; cursor:pointer; }
  .official-assets-extra-field[open]>summary { border-bottom:1px solid var(--glass-bd); color:var(--ink-soft); }
  .official-assets-extra-field>label { padding:10px; }
  .official-assets-file input { min-height:40px; padding:8px; border:1px dashed var(--glass-bd); border-radius:9px; color:var(--ink-soft); background:var(--glass); }
  .official-assets-file>span { display:flex; flex-wrap:wrap; gap:5px; }.official-assets-file em { color:var(--ink-dim); font-size:10.5px; font-style:normal; font-weight:400; }
  .official-assets-route-upload { grid-column:1/-1; display:grid; grid-template-columns:minmax(0,1fr) 36px minmax(0,1fr); gap:10px; align-items:center; }
  .official-assets-prompt-field { grid-column:1/-1; align-self:stretch; }
  .official-assets-prompt-field[hidden] { display:none; }
  .official-assets-prompt-field>span { display:flex; flex-wrap:wrap; align-items:center; gap:7px; }
  #officialAssetPromptAutofillState { padding:3px 7px; border-radius:999px; background:rgba(125,255,196,.1); color:#7dffc4; font-size:10px; font-style:normal; font-weight:700; }
  #officialAssetPromptAutofillState.edited { background:rgba(167,139,250,.12); color:#d8ccff; }
  html[data-theme="light"] #officialAssetPromptAutofillState { background:#ecfdf5; color:#047857; }
  html[data-theme="light"] #officialAssetPromptAutofillState.edited { background:#f5f3ff; color:#6d28d9; }
  .official-assets-prompt-field textarea,.official-asset-editor-grid textarea { min-height:150px; resize:vertical; line-height:1.65; font-family:inherit; }
  .official-assets-prompt-field small,.official-asset-editor-grid small { color:var(--ink-dim); font-size:10.5px; line-height:1.55; }
  .official-assets-route-arrow { color:var(--c3); font-size:20px; font-weight:900; text-align:center; }
  .official-assets-route-preview { grid-column:1/-1; display:grid; grid-template-columns:minmax(0,1fr) 36px minmax(0,1fr); gap:10px; align-items:center; padding:12px; border:1px solid var(--glass-bd); border-radius:12px; background:color-mix(in srgb,var(--glass) 76%,transparent); }
  .official-assets-route-preview[hidden] { display:none; }
  .official-assets-route-preview figure { min-width:0; margin:0; }
  .official-assets-route-preview img,.official-assets-route-preview figure.empty>div { width:100%; height:180px; object-fit:contain; border:1px solid var(--glass-bd); border-radius:10px; background:#fff; }
  .official-assets-route-preview figure.empty>div { display:grid; place-items:center; color:#64748b; font-size:12px; }
  .official-assets-route-preview figcaption { display:grid; gap:3px; margin-top:7px; color:var(--ink-soft); font-size:11.5px; text-align:center; }
  .official-assets-route-preview figcaption small { color:var(--ink-dim); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .official-assets-upload-foot { grid-column:1/-1; display:flex; align-items:center; justify-content:space-between; gap:16px; }.official-assets-upload-foot>span { color:var(--ink-dim); font-size:11px; line-height:1.55; }.official-assets-upload-foot>div { display:flex; flex:0 0 auto; gap:8px; }.official-assets-upload-foot button { flex:0 0 auto; }
  /* 统计条 / 工具条 / 分类导航已迁到 assets/css/admin/13-assets-toolbar.css（在本文件之后加载） */
  .official-assets-list { display:grid; grid-template-columns:repeat(auto-fill,minmax(min(360px,100%),1fr)); gap:14px; padding-bottom:30px; }
  .official-asset-card { padding:14px; border:1px solid var(--glass-bd); border-radius:15px; background:var(--glass); }
  .official-asset-card.pending { border-color:rgba(251,191,36,.24); }.official-asset-card.pending-publish { border-color:rgba(167,139,250,.34); }.official-asset-card.deleted{opacity:.78;border-style:dashed}.official-asset-card.deleted img{filter:grayscale(.6)}
  .official-asset-head { display:flex; align-items:flex-start; justify-content:space-between; gap:10px; margin-bottom:12px; }
  .official-asset-head b { display:block; color:var(--ink); font-size:14px; }.official-asset-head small { display:block; margin-top:4px; color:var(--ink-dim); }
  .official-asset-badges { display:flex; flex-wrap:wrap; justify-content:flex-end; gap:5px; }
  .official-asset-badge { padding:4px 8px; border:1px solid rgba(125,255,196,.2); border-radius:999px; background:rgba(125,255,196,.11); color:#7dffc4; font-size:11px; font-weight:750; line-height:1.25; white-space:nowrap; }
  .official-asset-badge.pending { border-color:rgba(251,191,36,.22); background:rgba(251,191,36,.12); color:#fbbf24; }.official-asset-badge.mapped { border-color:rgba(196,181,253,.22); background:rgba(167,139,250,.14); color:#d8ccff; }
  .official-asset-badge.deleted { border-color:rgba(203,213,225,.2); background:rgba(148,163,184,.14); color:#dbe4ef; }
  html[data-theme="light"] .official-asset-badge { border-color:#a7f3d0; background:#ecfdf5; color:#047857; }
  html[data-theme="light"] .official-asset-badge.pending { border-color:#fde68a; background:#fffbeb; color:#92400e; }
  html[data-theme="light"] .official-asset-badge.mapped { border-color:#ddd6fe; background:#f5f3ff; color:#6d28d9; }
  html[data-theme="light"] .official-asset-badge.deleted { border-color:#cbd5e1; background:#f1f5f9; color:#475569; }
  .official-asset-route { display:grid; grid-template-columns:minmax(0,1fr) 28px minmax(0,1fr); gap:8px; align-items:center; }
  .official-asset-route figure { min-width:0; margin:0; cursor:zoom-in; }.official-asset-route img { width:100%; aspect-ratio:1/1; object-fit:contain; border-radius:10px; background:#fff; border:1px solid var(--glass-bd); }
  .official-asset-route figure.official-asset-missing { cursor:default; }
  .official-asset-route figure.official-asset-missing>div { display:grid; place-items:center; width:100%; aspect-ratio:1/1; padding:14px; box-sizing:border-box; border:1px dashed var(--glass-bd); border-radius:10px; background:color-mix(in srgb,var(--glass) 70%,transparent); color:var(--ink-dim); font-size:12px; text-align:center; }
  .official-asset-route figcaption { margin:6px 0 0; color:var(--ink-dim); font-size:10.5px; text-align:center; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .official-asset-arrow { color:var(--c3); text-align:center; font-size:18px; font-weight:800; }
  .official-asset-meta { margin-top:11px; padding-top:10px; border-top:1px solid var(--glass-bd); color:var(--ink-soft); font-size:11.5px; line-height:1.6; }
  .official-asset-actions { display:flex; flex-wrap:wrap; justify-content:flex-end; gap:8px; margin-top:10px; }
  .official-asset-actions .pv-btn.primary { color:#0b1020; border-color:rgba(196,181,253,.65); background:linear-gradient(135deg,#ddd6fe,#a78bfa); font-weight:750; }
  .official-asset-lightbox { position:fixed; inset:0; z-index:250; display:grid; place-items:center; padding:22px; background:rgba(0,0,0,.72); backdrop-filter:blur(10px); }.official-asset-lightbox[hidden]{display:none}.official-asset-lightbox-card{position:relative;width:min(940px,100%);max-height:90vh;overflow:auto;padding:20px;border:1px solid var(--glass-bd);border-radius:18px;background:var(--bg-soft);box-shadow:0 30px 90px rgba(0,0,0,.55)}.official-asset-lightbox-card h2{margin:0 42px 16px 0;color:var(--ink);font-size:18px}.official-asset-lightbox-close{position:absolute;top:12px;right:12px;width:34px;height:34px;border:1px solid var(--glass-bd);border-radius:9px;background:var(--glass);color:var(--ink);font-size:21px;cursor:pointer}.official-asset-lightbox-route{display:grid;grid-template-columns:minmax(0,1fr) 42px minmax(0,1fr);gap:12px;align-items:center}.official-asset-lightbox-route figure{margin:0;min-width:0}.official-asset-lightbox-route img{width:100%;max-height:64vh;object-fit:contain;border-radius:12px;background:#fff}.official-asset-lightbox-route figure.official-asset-missing>div{display:grid;place-items:center;width:100%;min-height:220px;padding:18px;box-sizing:border-box;border:1px dashed var(--glass-bd);border-radius:12px;background:var(--glass);color:var(--ink-dim);text-align:center}.official-asset-lightbox-route figcaption{margin-top:7px;color:var(--ink-soft);font-size:12px;text-align:center}
  .official-asset-editor-card{width:min(980px,100%)}.official-asset-editor-card .official-asset-lightbox-route{margin-bottom:14px}.official-asset-editor-card .official-asset-lightbox-route img{max-height:150px}.official-asset-editor-actions{display:flex;justify-content:flex-end;gap:9px;margin-top:14px;padding-top:12px;border-top:1px solid var(--glass-bd)}
  .official-asset-image-editor{display:grid;gap:10px;margin:4px 0 15px;padding:14px;border:1px solid var(--glass-bd);border-radius:13px;background:var(--glass)}.official-asset-editor-section-title,.official-asset-new-route-title{color:var(--ink);font-size:12px;font-weight:750}.official-asset-edit-files{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.official-asset-edit-note{color:var(--ink-dim);font-size:10.5px;line-height:1.65}.official-asset-image-editor #officialAssetEditorNewRoute{padding-top:11px;border-top:1px solid var(--glass-bd)}.official-asset-new-route-title{margin-bottom:9px}.official-asset-image-editor input:disabled{cursor:not-allowed;opacity:.52}
  .official-asset-name-editor,.official-asset-prompt-editor{display:grid;gap:7px;color:var(--ink-dim);font-size:11.5px}.official-asset-name-editor{margin-bottom:14px}.official-asset-name-editor input{font-size:14px;font-weight:700}.official-asset-prompt-editor textarea{min-height:190px;resize:vertical;line-height:1.7;font-family:inherit}.official-asset-prompt-editor small{color:var(--ink-dim);font-size:10.5px;line-height:1.65}
  @media (max-width:900px){.official-assets-upload-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.official-assets-stats{grid-template-columns:repeat(2,minmax(0,1fr))}.official-assets-search-row{grid-template-columns:1fr 150px}.official-assets-search-row button{grid-column:1/-1}.official-assets-toolbar{top:-24px}}
  @media (max-width:600px){#officialAssetView{padding:18px 14px 84px}.official-assets-head p{font-size:13px}.official-assets-head-actions .btn{width:100%}.official-assets-upload-grid{grid-template-columns:1fr}.official-assets-route-upload,.official-assets-route-preview{grid-template-columns:1fr}.official-assets-route-arrow{transform:rotate(90deg)}.official-assets-upload-foot{align-items:stretch;flex-direction:column}.official-assets-upload-foot>div{display:grid;grid-template-columns:1fr}.official-assets-search-row{grid-template-columns:1fr}.official-assets-search-row button{grid-column:auto}.official-assets-list{grid-template-columns:1fr}.official-assets-category-tabs,.official-assets-subcategory-tabs{gap:7px}.official-assets-subcategory-control{width:100%;justify-content:space-between}.official-assets-category{padding:8px 14px;font-size:13px}.official-assets-subcategory{padding:7px 11px;font-size:11.5px}.official-asset-route{grid-template-columns:1fr}.official-asset-arrow{transform:rotate(90deg)}.official-asset-head{display:grid}.official-asset-badges{justify-content:flex-start}.official-asset-lightbox-route{grid-template-columns:1fr}.official-asset-lightbox-route>.official-asset-arrow{transform:rotate(90deg)}.official-asset-edit-files{grid-template-columns:1fr}.official-asset-editor-card{padding:16px}.official-asset-editor-actions{position:sticky;bottom:-16px;margin-inline:-16px;padding:12px 16px;background:color-mix(in srgb,var(--bg-soft) 95%,transparent);backdrop-filter:blur(12px)}}
  /* 顶部数据大板 KPI 与 TOP 排行的样式已迁到 assets/css/admin/16-users-kpis.css(.adm-kpi-* / .adm-rank-* / .adm-flow-*) */

  /* 用户列表卡片(每行)、列表表头、搜索/筛选工具条已整体迁到
     assets/css/admin/17-users-list.css(在本文件之后加载)。这里只保留主题覆盖里
     还会点名 .uv-card 的部分,以及详情抽屉 / 排行榜 / 审计条目这些没搬走的块。 */

  /* 单用户详情抽屉。第八百五十轮:表面、描边、语义色一律取 admin/00-shared.css
     的 --adm-* 令牌,不再写 rgba(255,255,255,.03) 和 #fbbf24 / #7dffc4 / #fca5a5
     ——这几个值只在夜间主题下读得出,白天几乎看不见。密度也对齐共享皮肤:
     分节标题 14.5px、统计格 --adm-radius-sm、流水行走 .adm-list 的发丝线。 */
  .uv-detail-head { display:flex; gap:14px; align-items:center; padding-bottom:14px; border-bottom:1px solid var(--adm-divider); margin-bottom:16px; }
  .uv-detail-avatar { display:grid; place-items:center; flex:none; width:44px; height:44px; border:1px solid var(--adm-bd); border-radius:12px; background:var(--adm-surface-2); font-size:22px; font-weight:700; line-height:1; }
  .uv-detail-name { display:flex; align-items:center; flex-wrap:wrap; gap:8px; font-size:17px; font-weight:800; letter-spacing:-.012em; color:var(--ink); }
  .uv-detail-meta { color:var(--ink-dim); font-size:12px; line-height:1.6; margin-top:5px; }
  .uv-stat-grid { display:grid; grid-template-columns:repeat(auto-fill, minmax(120px, 1fr)); gap:var(--adm-gap); margin-bottom:16px; }
  .uv-stat-tile { padding:11px 13px; background:var(--adm-surface); border:1px solid var(--adm-bd); border-radius:var(--adm-radius-sm); font-variant-numeric:tabular-nums; }
  .uv-stat-label { font-size:11.5px; font-weight:650; color:var(--ink-dim); }
  .uv-stat-value { font-size:17px; font-weight:800; letter-spacing:-.015em; color:var(--ink); margin-top:4px; }
  .uv-section-title { font-size:14.5px; font-weight:750; letter-spacing:-.01em; color:var(--ink); margin:20px 0 10px; }
  .uv-row { padding:11px 14px; background:transparent; border-radius:0; margin-bottom:0; min-height:48px; font-size:12.5px; display:flex; justify-content:space-between; gap:12px; align-items:center; }
  .uv-row-label { color:var(--ink); font-size:13px; font-weight:650; }
  .uv-row-meta { color:var(--ink-dim); font-size:11.5px; margin-top:3px; line-height:1.5; }
  .uv-row-cost { flex:none; color:var(--adm-warn); font-size:12.5px; font-weight:700; font-variant-numeric:tabular-nums; }
  .uv-row-price { flex:none; color:var(--adm-ok); font-size:12.5px; font-weight:700; font-variant-numeric:tabular-nums; }
  /* 授权状态胶囊:尺寸同 .adm-badge,四种状态各自的语义色 */
  .uv-row-state { display:inline-flex; flex:none; align-items:center; height:20px; padding:0 8px; border:1px solid var(--adm-bd); border-radius:6px; background:var(--adm-surface-2); color:var(--ink-soft); font-size:11px; font-weight:700; line-height:1; white-space:nowrap; }
  .uv-row-state.is-ok { border-color:var(--adm-ok-bd); background:var(--adm-ok-bg); color:var(--adm-ok); }
  .uv-row-state.is-warn { border-color:var(--adm-warn-bd); background:var(--adm-warn-bg); color:var(--adm-warn); }
  .uv-row-state.is-bad { border-color:var(--adm-bad-bd); background:var(--adm-bad-bg); color:var(--adm-bad); }

  /* 第二百五十三轮:封禁徽章 + block(sparkline / 审计流水已迁到 admin CSS) */
  .uv-ban-badge { display:inline-flex; flex:none; align-items:center; height:20px; padding:0 8px; border:1px solid var(--adm-bad-bd); border-radius:6px; background:var(--adm-bad-bg); color:var(--adm-bad); font-size:11px; font-weight:700; line-height:1; white-space:nowrap; }
  .uv-ban-block { padding:11px 13px; background:var(--adm-bad-bg); border:1px solid var(--adm-bad-bd); border-radius:var(--adm-radius-sm); color:var(--ink-soft); font-size:12.5px; line-height:1.7; margin-bottom:16px; }
  .uv-ban-block b { color:var(--adm-bad); font-weight:750; }

  /* 第二百五十四轮:单用户 30 天趋势 + email 可复制(TOP 排行已迁到 admin/16-users-kpis.css) */
  .uv-30d-spark { margin:16px 0; padding:13px 15px; background:var(--adm-surface); border:1px solid var(--adm-bd); border-radius:var(--adm-radius-sm); }
  .uv-30d-title { font-size:13px; color:var(--ink); font-weight:750; margin-bottom:10px; display:flex; align-items:center; gap:8px 12px; flex-wrap:wrap; }
  .uv-30d-legend { color:var(--ink-dim); font-size:11.5px; font-weight:500; display:inline-flex; align-items:center; gap:6px; font-variant-numeric:tabular-nums; }
  .uv-30d-legend i { display:inline-block; width:8px; height:8px; border-radius:2px; margin-right:2px; }
  .uv-30d-svg-wrap { position:relative; padding-left:38px; }
  .uv-30d-svg-wrap svg { display:block; height:26px; }
  .uv-30d-label { position:absolute; left:0; top:50%; transform:translateY(-50%); font-size:11.5px; color:var(--ink-dim); font-weight:650; }
  .uv-30d-label-spent { color:var(--adm-warn); }
  .uv-30d-label-rech { color:var(--adm-info); }
  .uv-30d-axis { display:flex; justify-content:space-between; padding-left:38px; color:var(--ink-dim); font-size:11.5px; margin-top:5px; }
  .uv-30d-empty { margin:16px 0; padding:20px; text-align:center; border:1px dashed var(--adm-bd); border-radius:var(--adm-radius-sm); color:var(--ink-dim); font-size:12.5px; }

  /* 第二百五十六轮:用户画像块(24h 活跃时段 + 功能 TOP3) */
  .uv-profile-block { margin:16px 0; padding:15px; background:var(--adm-surface); border:1px solid var(--adm-bd); border-radius:var(--adm-radius-sm); }
  .uv-profile-title { font-size:13px; color:var(--ink); font-weight:750; margin-bottom:11px; display:flex; align-items:baseline; gap:8px; flex-wrap:wrap; }
  .uv-profile-hint { color:var(--ink-dim); font-size:11.5px; font-weight:500; }
  .uv-profile-grid { display:grid; grid-template-columns: 1.4fr 1fr; gap:16px; }
  @media (max-width: 700px){ .uv-profile-grid { grid-template-columns: 1fr; } }
  .uv-profile-col { min-width:0; }
  .uv-profile-sub { font-size:11.5px; font-weight:650; color:var(--ink-dim); margin-bottom:7px; }
  .uv-feat-list { display:flex; flex-direction:column; gap:6px; }
  .uv-feat-chip { display:flex; align-items:center; gap:9px; padding:8px 11px; background:var(--adm-surface-2); border:1px solid var(--adm-bd); border-radius:var(--adm-radius-xs); font-size:12.5px; }
  .uv-feat-rank { flex:none; min-width:18px; color:var(--ink-dim); font-size:11.5px; font-weight:800; text-align:center; font-variant-numeric:tabular-nums; }
  .uv-feat-chip:first-child .uv-feat-rank { color:var(--adm-accent); }
  .uv-feat-name { color:var(--ink); font-weight:650; flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .uv-feat-count { color:var(--ink-dim); font-size:11.5px; font-variant-numeric:tabular-nums; }

  .uv-email-copy { cursor:pointer; transition:color .12s; }
  .uv-email-copy:hover { color:var(--adm-info); text-decoration:underline; }

  /* 模型清单分组视图已重做成 admin/04-models.css 的 .mdl-*,这里只剩 pvToggleModelGroup
     依赖的两个 DOM 约定类,删掉会让折叠箭头和表体失去原有间距。 */
  .pv-model-group-caret { font-size:10px; color:var(--ink-dim); width:12px; display:inline-block; text-align:center; }
  .pv-model-group-body { display:flex; flex-direction:column; gap:8px; padding-left:6px; }

  /* 优化 E:导入 diff 展示 */
  .pv-diff { margin-top:14px; padding:12px 14px; background:rgba(255,255,255,.03); border:1px solid var(--glass-bd); border-radius:10px; font-size:12.5px; display:flex; flex-direction:column; gap:6px; }
  .pv-diff-line { color:var(--ink-soft); }
  .pv-diff-line b { color:var(--ink); font-weight:700; }
  .pv-diff-add { color:#7dffc4; }
  .pv-diff-update { color:#22d3ee; }
  .pv-diff-del { color:#fca5a5; }
  .pv-diff-hint { color:var(--ink-dim); font-size:11.5px; margin-top:4px; }

  /* 优化 B:批量试跑结果框 */
  #batchTestSummary { margin-bottom:16px; padding:16px 18px; background:var(--glass); border:1px solid var(--glass-bd); border-radius:14px; }
  .pv-batch-header { display:flex; gap:16px; align-items:center; font-size:13.5px; color:var(--ink-soft); margin-bottom:10px; padding-bottom:10px; border-bottom:1px solid rgba(255,255,255,.06); }
  .pv-batch-header b { color:var(--ink); font-weight:800; margin:0 3px; }
  .pv-batch-header .pv-batch-skip { color:#fbbf24; }
  .pv-batch-header .pv-batch-fail { color:#fca5a5; }
  /* 试跑结果条的关闭键。原来是 span+onclick,键盘按不到;换成 button 后要把 UA 外观清掉。 */
  .pv-batch-header .pv-batch-close { margin-left:auto; padding:0; border:0; background:none; appearance:none; cursor:pointer; color:var(--ink-dim); font:inherit; }
  .pv-batch-header .pv-batch-close:hover { color:var(--ink); }
  .pv-batch-loading { color:var(--c3); padding:6px 0; }
  .pv-batch-list { display:flex; flex-direction:column; gap:8px; }
  .pv-batch-row { display:flex; gap:12px; align-items:center; padding:8px 12px; border-radius:8px; font-size:12.5px; background:rgba(255,255,255,.02); flex-wrap:wrap; }
  .pv-batch-row.ok { border-left:3px solid #7dffc4; }
  .pv-batch-row.fail { border-left:3px solid #fca5a5; }
  .pv-batch-row.skipped { border-left:3px solid #fbbf24; }
  .pv-batch-row b { color:var(--ink); font-weight:700; min-width:140px; }
  .pv-batch-row .pv-batch-stat { color:var(--ink-dim); flex:1; min-width:0; }
  .pv-batch-row .pv-batch-tag { color:#fbbf24; }
  .pv-batch-row .pv-batch-reason { color:var(--ink-dim); }

  /* 优化 C:流水页筛选栏(同轮的统计条 .pv-summary-* 已随调用页重构删除) */
  .pv-filters { padding:12px 0; }
  .pv-list-hint { color:var(--ink-dim); font-size:12px; margin-bottom:8px; padding:0 6px; }
  .pv-summary { margin-bottom:14px; }
  @media (max-width:760px){
    .pv-batch-row b { min-width:auto; }
  }
  .pv-probe-body { color:var(--ink-soft); margin-top:6px; line-height:1.6; }
  .pv-probe-hint { color:var(--ink-dim); font-size:11.5px; margin-top:8px; }
  .pv-probe-spinning { color:var(--ink-soft); }
  .pv-modal-box { background:rgba(24,20,36,.98); border:1px solid var(--glass-bd); border-radius:20px; padding:26px; max-width:560px; width:calc(100% - 40px); max-height:88vh; overflow-y:auto; }
  .pv-modal-head { display:flex; justify-content:space-between; align-items:center; margin-bottom:6px; }
  .pv-modal-head h3 { font-size:18px; font-weight:800; }
  .pv-modal-sub { font-size:12.5px; color:var(--ink-dim); margin-bottom:16px; }
  .pv-modal-close { background:none; border:none; color:var(--ink-soft); font-size:20px; cursor:pointer; padding:4px 8px; }
  .pv-modal-close:hover { color:var(--ink); }
  .pv-form label { display:block; font-size:12.5px; color:var(--ink-soft); margin:12px 0 6px; font-weight:600; }
  .pv-form input, .pv-form textarea, .pv-form select { width:100%; background:var(--glass); border:1px solid var(--glass-bd); border-radius:10px; padding:10px 12px; color:var(--ink); font-family:inherit; font-size:13.5px; box-sizing:border-box; }
  .pv-form input:focus, .pv-form textarea:focus, .pv-form select:focus { border-color:var(--c1); outline:none; }
  .pv-form textarea { resize:vertical; }
  .pv-form .row { display:grid; grid-template-columns:1fr 1fr; gap:12px; }
  .pv-modal-foot { display:flex; justify-content:flex-end; gap:10px; margin-top:20px; padding-top:16px; border-top:1px solid rgba(255,255,255,.06); }
  .pv-inline-hint { font-size:11.5px; color:var(--ink-dim); margin-top:4px; line-height:1.5; }
  @media (max-width:760px){
    #providerView { padding:20px; }
    .pv-form .row { grid-template-columns:1fr; }
  }

  .amount-grid { display:grid; grid-template-columns:repeat(2,1fr); gap:12px; margin:18px 0; }
  .amount-grid .amt:last-child:nth-child(odd) { grid-column:1 / -1; }
  .amount-grid .amt { border:1.5px solid var(--glass-bd); border-radius:16px; padding:18px; cursor:pointer; transition:all .2s var(--ease); text-align:center; position:relative; }
  .amount-grid .amt:hover { border-color:rgba(255,255,255,.3); }
  .amount-grid .amt.active { border-color:transparent; background:var(--grad-soft); box-shadow:inset 0 0 0 1.5px var(--c1); }
  .amount-grid .amt .av { font-size:24px; font-weight:850; }
  .amount-grid .amt .ag { font-size:12px; color:#6ee7b7; margin-top:4px; font-weight:750; }
  /* 第一百六十四轮:充值卡新增"约出 N 张 / M 秒视频"换算行,与算力数字区分开一层灰度,视觉不抢主价格 */
  .amount-grid .amt .ah { font-size:11.5px; color:var(--ink-dim); margin-top:5px; letter-spacing:.2px; line-height:1.5; }
  .amount-grid .amt.active .ah { color:var(--ink-soft); }
  .amount-grid .amt .ad { margin-top:7px; font-size:11px; font-weight:750; letter-spacing:.01em; color:#c4b5fd; }
  .amount-grid .amt .gift { position:absolute; top:-9px; right:10px; font-size:10px; font-weight:700; background:var(--grad); color:#fff; padding:2px 8px; border-radius:999px; }
  /* 六档套餐:主推档(2026-09-24 起 ¥1288)左上角"最受欢迎"角标 + 常驻描边;¥5888 左上角"最划算" */
  .amount-grid .amt .hot-tag { position:absolute; top:-9px; left:10px; font-size:10px; font-weight:700; background:#f59e0b; color:#1a1206; padding:2px 8px; border-radius:999px; }
  .amount-grid .amt.hot { border-color:rgba(245,158,11,.55); }
  .amount-grid .amt.hot.active { box-shadow:inset 0 0 0 1.5px var(--c1); }
  .amount-grid .amt .hot-tag.value-tag { background:#10b981; color:#03140d; }

  .ledger { margin-top:22px; }
  .ledger-tabs { display:flex; gap:8px; margin-bottom:16px; }
  .ltab { font-size:13px; font-weight:600; padding:8px 16px; border-radius:999px; border:1px solid var(--glass-bd); background:var(--glass); color:var(--ink-soft); cursor:pointer; }
  .ltab.active { background:var(--grad); color:#fff; border-color:transparent; }
  table { width:100%; border-collapse:collapse; }
  th { text-align:left; font-size:12px; color:var(--ink-dim); font-weight:600; padding:12px 14px; border-bottom:1px solid var(--glass-bd); }
  td { font-size:13.5px; padding:14px; border-bottom:1px solid rgba(255,255,255,.05); color:var(--ink-soft); }
  .st-ok { color:#7dffc4; } .st-pending { color:#fbbf24; }
  .ledger-more { text-align:center; margin-top:16px; padding:11px; border:1px solid var(--glass-bd); border-radius:11px; background:var(--glass);
    color:var(--ink-soft); font-size:13px; font-weight:600; cursor:pointer; transition:all .2s var(--ease); }
  .ledger-more:hover { border-color:rgba(255,255,255,.28); background:var(--glass-2); color:var(--ink); }
  .ledger-end { text-align:center; margin-top:16px; font-size:12.5px; color:var(--ink-dim); }

  /* 提示条:z-index 必须压过全部弹层(.modal-bg 300 / .lb 300 / .ulb 320 /
     .hzg-local-edit-modal 520 / 预设面板 540),否则"充值失败""JSON 不合法""挂载失败"
     这类只在弹窗里发生的反馈会被遮罩整个吞掉,用户看到的是按钮恢复可点但屏幕毫无变化。
     同时必须 pointer-events:none:这个节点常驻(靠 opacity 隐藏,从不 display:none),抬层之后
     窄屏下会压住大图/弹窗底部那颗按钮——错误 toast 停留 7 秒,用户的重试点击全被它吃掉。 */
  .toast { position:fixed; bottom:28px; left:50%; transform:translateX(-50%) translateY(80px); z-index:600; pointer-events:none;
    background:var(--bg-soft); border:1px solid var(--glass-bd); border-radius:14px; padding:14px 24px; font-size:14px; font-weight:600;
    box-shadow:0 20px 50px rgba(0,0,0,.5); opacity:0; transition:all .35s var(--ease); }
  .toast.show { transform:translateX(-50%) translateY(0); opacity:1; }

  /* —— 支付弹窗 —— */
  .modal-bg { position:fixed; inset:0; z-index:300; background:rgba(4,4,10,.74); backdrop-filter:blur(12px); display:none; place-items:center; padding:24px; }
  .modal-bg.show { display:grid; animation:lbfade .3s ease; }
  /* 第三百四十五轮:admin 用户面板 modal(userDetailModal/balanceModal/adminConfirmModal;审计流水本轮已升级为独立页)
     使用了 .modal / .modal-head / .modal-title / .modal-body / .modal-close 类,但整份 CSS 从未定义;
     用户面板上线 344 轮都没写这些,桌面端渲染成透明容器+浏览器默认 ✕(~20px),移动端更别提。补齐。 */
  .modal { background:var(--bg-soft, #17171d); border:1px solid var(--glass-bd); border-radius:20px; padding:22px 26px; width:100%; max-height:88vh; overflow-y:auto; position:relative; }
  .modal-head { display:flex; justify-content:space-between; align-items:center; gap:16px; margin-bottom:14px; }
  .modal-title { font-size:18px; font-weight:800; color:var(--ink); line-height:1.3; }
  .modal-body { color:var(--ink-soft); line-height:1.6; }
  /* .modal-close:44×44 满足 iOS HIG 触点底线,payModal 里的 × 也复用它 */
  .modal-close { width:44px; height:44px; display:grid; place-items:center; background:transparent; border:0; color:var(--ink-dim); font-size:22px; line-height:1; cursor:pointer; border-radius:12px; padding:0; }
  .modal-close:hover { color:var(--ink); background:rgba(255,255,255,.06); }
  .pay-modal { width:100%; max-width:440px; background:var(--bg-soft); border:1px solid var(--glass-bd); border-radius:24px; padding:32px;
    box-shadow:0 50px 120px rgba(0,0,0,.7); animation:lbpop .35s var(--ease); }
  .pay-modal h3 { font-size:21px; font-weight:850; margin-bottom:4px; }
  .pay-modal .pm-sub { font-size:13px; color:var(--ink-dim); margin-bottom:22px; }
  .pm-row { display:flex; justify-content:space-between; align-items:center; font-size:14px; padding:11px 0; color:var(--ink-soft); border-bottom:1px solid rgba(255,255,255,.06); }
  .pm-row .gift { color:#7dffc4; font-weight:600; }
  .pm-row .pm-arrive { color:var(--ink); font-weight:800; font-size:15px; }
  .pm-row.total { border-bottom:none; padding-top:16px; }
  .pm-row.total .pm-pay { font-size:24px; font-weight:850; background:var(--grad); -webkit-background-clip:text; background-clip:text; color:transparent; }
  .pm-section-t { font-size:13px; font-weight:700; margin:18px 0 12px; }
  .pm-methods { display:grid; grid-template-columns:repeat(3,1fr); gap:10px; margin-bottom:6px; }
  .pm-methods.dual { grid-template-columns:repeat(2,1fr); }
  .pm-methods.single { grid-template-columns:1fr; }
  .pm-methods.single .pm-method { cursor:default; }
  .pm-method { border:1.5px solid var(--glass-bd); border-radius:14px; padding:14px 6px; text-align:center; cursor:pointer; transition:all .2s var(--ease);
    font:inherit; font-size:12.5px; font-weight:600; color:var(--ink-soft); background:transparent; }
  .pm-method .pmi { font-size:22px; display:block; margin-bottom:6px; }
  .pm-method .pmi-brand { width:38px; height:38px; margin:0 auto 7px; }
  .pm-method .pmi-brand svg { display:block; width:100%; height:100%; }
  .pm-method:hover { border-color:rgba(255,255,255,.3); }
  .pm-method.active { border-color:transparent; background:var(--grad-soft); box-shadow:inset 0 0 0 1.5px var(--c1); color:var(--ink); }
  .pm-close { text-align:center; margin-top:14px; font-size:13px; color:var(--ink-dim); cursor:pointer; }
  .pm-close:hover { color:var(--ink-soft); }
  /* 支付等待态(扫码/跳转后轮询到账) */
  .pm-qr-wrap { display:grid; place-items:center; margin:18px 0 6px; min-height:120px; }
  .pm-qr { width:220px; height:220px; border-radius:16px; background:#fff; padding:10px; box-shadow:0 12px 40px rgba(0,0,0,.45); }
  .pm-ali-hint { text-align:center; font-size:13.5px; color:var(--ink-soft); line-height:2; padding:26px 0; }
  .pm-ali-hint a { color:var(--c1); }
  .pm-wait-status { display:flex; align-items:center; justify-content:center; gap:8px; font-size:13px; color:var(--ink-soft); margin:8px 0 4px; }
  .pm-wait-status.err { color:#fca5a5; }
  .pm-dot { width:8px; height:8px; border-radius:50%; background:#7dffc4; animation:pmpulse 1.2s ease infinite; }
  @keyframes pmpulse { 0%,100%{opacity:.35; transform:scale(.85)} 50%{opacity:1; transform:scale(1)} }
  /* —— 结果大图查看器 —— */
  /* 上传图查看层:槽内预览是 cover 居中裁剪,这里点开看完整原图 */
  .ulb { position:fixed; inset:0; z-index:320; background:rgba(4,4,10,.88); backdrop-filter:blur(14px); display:none; place-items:center; padding:40px; }
  .ulb.show { display:grid; }
  .ulb-box { display:grid; gap:14px; justify-items:center; max-width:min(92vw,1000px); }
  .ulb-box img { max-width:100%; max-height:76vh; object-fit:contain; border-radius:12px; border:1px solid var(--glass-bd); background:#08080f; }
  .ulb-bar { display:flex; gap:10px; flex-wrap:wrap; justify-content:center; }
  .lb { position:fixed; inset:0; z-index:300; background:rgba(4,4,10,.86); backdrop-filter:blur(14px); display:none; place-items:center; padding:40px; }
  .lb.show { display:grid; animation:lbfade .3s ease; }
  @keyframes lbfade { from{opacity:0} to{opacity:1} }
  /* 大图按原图像素完整 contain。
     对比模式根因：lb-card 只有 max-height、没有确定 height 时，子级 height:100% 无法解析，
     图片会按 width:100% + 固有比例撑得很高，再被 overflow:hidden 裁掉上下。 */
  .lb-card { display:grid; grid-template-columns:minmax(0,auto) 330px; grid-template-rows:minmax(0,1fr); width:max-content; max-width:min(1280px, calc(100vw - 48px)); max-height:92vh; background:var(--bg-soft);
    border:1px solid var(--glass-bd); border-radius:24px; overflow:hidden; box-shadow:0 50px 120px rgba(0,0,0,.7); animation:lbpop .35s var(--ease); position:relative; }
  .lb-card.has-compare { width:100%; height:92vh; max-width:min(1760px, calc(100vw - 36px)); grid-template-columns:minmax(0,1fr) 330px; }
  .lb-card.has-compare .lb-img { display:grid; grid-template-rows:minmax(0,1fr) auto; place-items:stretch; min-height:0; height:100%; }
  .lb-compare { display:grid; grid-template-columns:repeat(var(--lb-panes,2), minmax(0,1fr)); width:100%; height:100%; min-height:0; min-width:0; align-self:stretch; justify-self:stretch; position:relative; }
  .lb-pane { margin:0; min-width:0; min-height:0; display:grid; place-items:center; position:relative; overflow:hidden; background:#08080f; }
  .lb-pane + .lb-pane { border-left:1px solid var(--glass-bd); }
  .lb-pane img, .lb-pane video { width:auto; height:auto; max-width:100%; max-height:100%; object-fit:contain; transform-origin:center center; will-change:transform; -webkit-user-drag:none; }
  .lb-pane figcaption, .lb-pane .wtag { position:absolute; top:18px; left:18px; font-size:12px; font-weight:700; padding:5px 12px; border-radius:999px; background:rgba(0,0,0,.5); backdrop-filter:blur(6px); color:#fff; z-index:2; }
  .lb-aux-thumbs { display:flex; flex-wrap:wrap; justify-content:center; gap:8px; padding:8px 12px 10px; border-top:1px solid var(--glass-bd); background:rgba(8,8,15,.55); }
  .lb-aux-thumb { width:58px; height:58px; padding:0; border:1px solid var(--glass-bd); border-radius:10px; overflow:hidden; background:var(--slot-preview-matte); cursor:zoom-in; position:relative; }
  .lb-aux-thumb img { width:100%; height:100%; object-fit:contain; display:block; }
  .lb-aux-thumb span { position:absolute; left:4px; right:4px; bottom:3px; font-size:9px; font-weight:700; color:#fff; text-align:center; text-shadow:0 1px 4px rgba(0,0,0,.8); pointer-events:none; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  .ulb.preview-only .ulb-mutate { display:none; }
  @keyframes lbpop { from{transform:scale(.95); opacity:0} to{transform:scale(1); opacity:1} }
  .lb-img { display:flex; align-items:center; justify-content:center; position:relative; min-height:min(440px, 70vh); min-width:0; background:#08080f; overflow:hidden; touch-action:none; user-select:none; }
  .lb-card.has-aux .lb-img { display:grid; grid-template-rows:minmax(0,1fr) auto; place-items:stretch; }
  .lb-card.has-compare .lb-img { display:grid; grid-template-rows:minmax(0,1fr) auto; place-items:stretch; min-height:0; height:100%; }
  .lb-img > img { display:block; width:auto; height:auto; max-width:min(100%, calc(100vw - 330px - 96px)); max-height:min(88vh, calc(92vh - 8px)); object-fit:contain; transform-origin:center center; will-change:transform; -webkit-user-drag:none; }
  .lb-compare .lb-pane img,
  .lb-compare .lb-pane video { width:auto; height:auto; max-width:100%; max-height:100%; object-fit:contain; }
  .lb-img .em { font-size:120px; }
  .lb-failure { max-width:560px; padding:34px; display:grid; justify-items:center; gap:12px; text-align:center; color:#fca5a5; }
  .lb-failure > span { width:52px; height:52px; border-radius:50%; border:3px solid currentColor; display:grid; place-items:center; color:#e07a5f; font-size:28px; font-weight:800; line-height:1; }
  .lb-failure b { color:#fecaca; font-size:19px; }
  .lb-failure p { line-height:1.65; font-size:13px; word-break:break-word; }
  /* 结果大图缩放控制条(悬停浮现) */
  .lb-zoom { position:absolute; bottom:16px; left:50%; transform:translateX(-50%); display:flex; align-items:center; gap:2px;
    padding:5px; border-radius:999px; background:rgba(8,8,15,.6); backdrop-filter:blur(12px); border:1px solid var(--glass-bd);
    box-shadow:0 8px 24px rgba(0,0,0,.4); z-index:6; opacity:0; transform:translateX(-50%) translateY(6px); transition:opacity .25s, transform .25s; }
  .lb-pane:hover .lb-zoom, .lb-compare:hover > .lb-zoom, .lb-img:hover > .lb-zoom, .lb-zoom.on { opacity:1; transform:translateX(-50%) translateY(0); }
  .lb-zoom button { width:30px; height:30px; border:none; background:transparent; color:#fff; font-size:18px; line-height:1; cursor:pointer;
    border-radius:50%; display:grid; place-items:center; transition:background .18s; }
  .lb-zoom button:hover { background:rgba(255,255,255,.16); }
  .lb-zoom button:disabled { opacity:.35; cursor:default; }
  .lb-zoom .pct { min-width:50px; text-align:center; font-size:12.5px; font-weight:700; color:#fff; font-variant-numeric:tabular-nums; cursor:default; }
  .lb-img .wtag { position:absolute; top:18px; left:18px; font-size:12px; font-weight:700; padding:5px 12px; border-radius:999px; background:rgba(0,0,0,.5); backdrop-filter:blur(6px); color:#fff; }
  .lb-img .lb-play { position:absolute; top:50%; left:50%; transform:translate(-50%,-50%); width:76px; height:76px; border-radius:50%;
    background:rgba(139,92,246,.6); backdrop-filter:blur(8px); border:2px solid rgba(255,255,255,.8); display:grid; place-items:center;
    font-size:30px; color:#fff; padding-left:6px; cursor:pointer; transition:all .25s var(--ease); }
  .lb-img .lb-play:hover { background:rgba(139,92,246,.85); transform:translate(-50%,-50%) scale(1.08); }
  .lb-info { padding:32px; display:flex; flex-direction:column; border-left:1px solid var(--glass-bd); overflow:hidden; min-height:0; }
  .lb-info h3 { font-size:22px; font-weight:850; margin-bottom:6px; flex-shrink:0; }
  .lb-info .lb-time { font-size:13px; color:var(--ink-dim); margin-bottom:22px; flex-shrink:0; }
  .lb-err { font-size:12.5px; color:#fca5a5; background:rgba(239,68,68,.1); border:1px solid rgba(239,68,68,.25); border-radius:10px; padding:9px 12px; margin-bottom:18px; line-height:1.5; word-break:break-all; flex-shrink:0; }
  .lb-params { flex:1 1 auto; min-height:0; overflow-y:auto; margin-right:-14px; padding-right:12px; mask-image:linear-gradient(to bottom, transparent 0, #000 12px, #000 calc(100% - 16px), transparent 100%); -webkit-mask-image:linear-gradient(to bottom, transparent 0, #000 12px, #000 calc(100% - 16px), transparent 100%); }
  .lb-param { display:flex; justify-content:space-between; font-size:13.5px; padding:11px 0; border-bottom:1px solid rgba(255,255,255,.05); color:var(--ink-soft); gap:16px; }
  .lb-param > span:last-child { text-align:right; word-break:break-word; }
  .lb-actions { margin-top:16px; padding-top:16px; border-top:1px solid rgba(255,255,255,.07); display:grid; gap:10px; flex-shrink:0; }
  .lb-actions .btn { width:100%; }
  .lb-actions .btn.danger { color:#fca5a5; border-color:rgba(239,68,68,.25); }
  .lb-close { position:absolute; top:20px; right:24px; width:40px; height:40px; border-radius:50%; background:rgba(255,255,255,.1); border:1px solid var(--glass-bd); display:grid; place-items:center; cursor:pointer; font-size:16px; z-index:8; color:#fff; transition:all .2s; }
  .lb-close:hover { background:rgba(255,255,255,.22); }
  .lb-nav { position:absolute; top:50%; transform:translateY(-50%); width:50px; height:50px; border-radius:50%; background:rgba(255,255,255,.1); border:1px solid var(--glass-bd); display:grid; place-items:center; cursor:pointer; font-size:24px; color:#fff; z-index:5; transition:all .2s; }
  .lb-nav:hover { background:rgba(255,255,255,.24); }
  .lb-prev { left:28px; } .lb-next { right:28px; }
  @media (max-width:1180px){
    .lb-compare { grid-template-columns:repeat(var(--lb-panes,2), minmax(210px,1fr)); overflow-x:auto; }
  }
  @media (max-width:760px){
    .lb { padding:12px; }
    .lb-card { width:100%; height:auto; max-height:calc(100dvh - 24px); grid-template-columns:1fr; grid-template-rows:minmax(220px,44vh) auto; overflow-y:auto; border-radius:18px; }
    .lb-card.has-compare { height:auto; grid-template-rows:minmax(320px,58vh) auto; }
    .lb-card.has-compare .lb-img { height:auto; min-height:320px; max-height:58vh; }
    .lb-compare { min-height:240px; height:min(46vh,380px); grid-template-columns:repeat(var(--lb-panes,2), minmax(42vw,1fr)); overflow-x:auto; }
    .lb-pane + .lb-pane { border-left:1px solid var(--glass-bd); border-top:0; }
    .lb-img { min-height:220px; height:44vh; touch-action:pan-y; }
    .lb-img > img,.lb-img video { max-width:100% !important; max-height:44vh !important; }
    .lb-compare .lb-pane img,
    .lb-compare .lb-pane video { max-width:100% !important; max-height:100% !important; width:auto !important; height:auto !important; }
    .lb-info { padding:20px; border-left:0; border-top:1px solid var(--glass-bd); overflow:visible; }
    .lb-info h3 { padding-right:40px; font-size:19px; }
    .lb-info .lb-time { margin-bottom:14px; }
    .lb-params { flex:none; max-height:32vh; margin-right:0; padding-right:4px; }
    .lb-actions { padding-bottom:calc(4px + env(safe-area-inset-bottom)); }
    .lb-nav { display:none; }
  }
  @media (hover:none), (pointer:coarse){
    .zj-cell .zj-ht,.zj-cell .zj-hb { display:none; }
  }

  @media (max-width:980px) {
    #studioView { flex-direction:column; overflow-y:auto; }
    .params { width:100% !important; border-right:none; border-bottom:1px solid var(--glass-bd); height:auto; }
    .params-resizer { display:none; }
    .canvas { height:auto; }
    .rv-grid { grid-template-columns:1fr; }
  }

  /* ============ 手机端 (<768px):参数面板改底部抽屉 · 触控目标 ≥44px · 输入 16px 防 iOS 缩放(第一百六十二轮) ============ */
  .m-params-fab, .m-params-close, .m-params-mask { display:none; }
  @media (max-width:768px) {
    /* #studioView 恢复叠层布局:canvas 全屏,params 从底部滑出 */
    #studioView { display:block; overflow:hidden; position:relative; height:100%; }
    .mobile-nav { position:sticky; top:0; z-index:15; height:52px; padding:7px 12px; gap:8px; }
    .mobile-nav .mchip, .mobile-nav .tt-cat { min-height:38px; font-size:13px; padding:8px 12px; }
    /* 第三百四十五轮:padding-bottom 加 safe-area,配合 .m-params-fab 让内容不被 iPhone home indicator 遮 */
    .canvas { position:absolute; top:52px; left:0; right:0; bottom:0; padding:14px 16px calc(96px + env(safe-area-inset-bottom)); overflow-y:auto; height:auto; -webkit-overflow-scrolling:touch; }
    .canvas-head { flex-direction:column; align-items:flex-start; gap:10px; margin-bottom:12px; }
    .canvas-head h2 { font-size:18px; }
    .canvas-head .ch-left { width:100%; align-items:center; justify-content:space-between; gap:8px 10px; flex-wrap:wrap; }
    .ch-scope .chs-btn { padding:5px 9px; font-size:11.5px; }
    .rcard .rbadges { top:8px; left:8px; right:8px; gap:5px; }
    .rcard .vtag { max-width:44%; padding:3px 7px; font-size:9.5px; }
    .rcard .rmeta { max-width:76%; padding:3px 7px; font-size:9.5px; }
    .canvas-head .ch-hint { max-width:66%; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; padding:5px 9px; border:1px solid rgba(255,255,255,.1); border-radius:999px; background:rgba(255,255,255,.05); color:#aaaabe; font-size:11.5px; }

    /* 参数面板改成 bottom sheet */
    .params {
      position:fixed; left:0; right:0; bottom:0; top:auto;
      width:100% !important;
      max-height:88vh; height:88vh;
      padding:22px 20px 104px;
      border-right:none; border-top:1px solid rgba(255,255,255,.16);
      border-radius:22px 22px 0 0;
      background:#151522;
      backdrop-filter:blur(20px);
      box-shadow:0 -24px 72px rgba(0,0,0,.72), inset 0 1px 0 rgba(255,255,255,.04);
      transform:translateY(100%);
      transition:transform .32s var(--ease);
      z-index:60;
      overflow-y:auto;
      -webkit-overflow-scrolling:touch;
      pointer-events:auto;
    }
    .params.open { transform:translateY(0); }
    .params .feat-head p, .params .field-label, .params .cost-detail, .params .extras-hint, .params .dh-hint { color:#aaaabe; }
    .params > .field { padding:14px; border:1px solid rgba(255,255,255,.085); border-radius:15px; background:rgba(255,255,255,.025); }
    .params > .field + .field { margin-top:12px; }
    .params .hzg-task-list > .field.hzg-task-card { margin:0; padding:10px 0 12px; border:0; border-radius:0; background:transparent; box-shadow:none; }
    .params .slot:not(.has-img), .params .retouch-dropzone, .params .dc-upload { border-color:rgba(255,255,255,.18); background:rgba(255,255,255,.045); }
    .params .pill, .params .sub-chip { border-color:rgba(255,255,255,.15); color:#c3c3d1; background:rgba(255,255,255,.055); }
    /* 第三百四十五轮:padding-bottom 加 safe-area,防 iPhone home indicator(~34pt)遮住"生成"按钮下沿 */
    .params .gen-bar { margin-left:-20px; margin-right:-20px; padding:10px 20px calc(12px + env(safe-area-inset-bottom)); background:#151522; border-top:1px solid rgba(255,255,255,.1); box-shadow:0 -14px 30px rgba(8,8,16,.85); }
    .params .gen-bar .cost-row { margin-bottom:8px; }
    .params .gen-bar .cost-detail { display:none; }
    .params .gen-btn:disabled { color:#c4c4d0; opacity:.68; background:linear-gradient(95deg,#5f4a83,#74445f); }
    .m-param-overview { display:block; position:sticky; top:-22px; z-index:12; margin:-2px -20px 16px; padding:10px 20px 12px; border-bottom:1px solid rgba(255,255,255,.1); background:rgba(21,21,34,.96); backdrop-filter:blur(18px); }
    .m-param-overview-head { display:flex; align-items:center; justify-content:space-between; gap:12px; margin-bottom:9px; }
    .m-param-overview-head b { font-size:13px; }
    .m-param-progress { font-size:11px; font-weight:750; color:#fbbf24; }
    .m-param-progress.ready { color:#7dffc4; }
    .m-param-jumps { display:grid; grid-template-columns:repeat(3,1fr); gap:7px; }
    .m-param-jumps button { height:34px; border:1px solid rgba(255,255,255,.11); border-radius:10px; background:rgba(255,255,255,.045); color:#bdbdcc; font:700 11.5px/1 inherit; cursor:pointer; }
    .m-param-jumps button:hover, .m-param-jumps button:focus-visible { border-color:rgba(167,139,250,.5); color:#fff; background:var(--grad-soft); }
    /* 抽屉顶部拖拽提示条(纯装饰,不实际支持拖拽,给"这是可关闭的抽屉"的视觉暗示) */
    .params::before {
      content:''; display:block; width:44px; height:4px; margin:-8px auto 16px;
      background:rgba(255,255,255,.22); border-radius:2px;
    }
    /* 关闭按钮 · 打开按钮 · 遮罩 */
    .m-params-close {
      display:none; position:fixed; right:14px; top:14px; z-index:70;
      width:44px; height:44px; border-radius:50%;
      background:var(--bg-soft); border:1px solid var(--glass-bd); color:var(--ink);
      align-items:center; justify-content:center; font-size:18px; cursor:pointer;
    }
    .m-params-mask {
      display:none; position:fixed; inset:0; background:rgba(0,0,0,.55); z-index:59;
    }
    .m-params-fab {
      display:flex; position:fixed; left:16px; right:16px; z-index:50;
      /* 第三百四十五轮:加 env(safe-area-inset-bottom),避开 iPhone home indicator 手势保留区(~34pt)。
         之前只 bottom:16px,FAB 底端落在上滑返回主屏的手势区里,iPhone 15/14/13 上点它经常被系统识别成回主屏。 */
      bottom:calc(16px + env(safe-area-inset-bottom));
      align-items:center; justify-content:center; gap:8px;
      height:52px; border:none; border-radius:26px;
      background:var(--grad); color:#fff; font-size:15px; font-weight:800; letter-spacing:.3px;
      box-shadow:0 12px 36px rgba(139,92,246,.42), 0 2px 8px rgba(0,0,0,.35);
      cursor:pointer;
    }
    /* 抽屉打开时:显示遮罩+关闭按钮,隐藏 fab */
    body.mparams-open .m-params-mask { display:block; }
    body.mparams-open .m-params-close { display:flex; }
    body.mparams-open .m-params-fab { display:none; }
    body.mparams-open { overflow:hidden; }
    body.mparams-open .params { color:#f7f7fb; }

    .welcome-hint { display:grid; grid-template-columns:1fr auto auto; gap:8px; padding:10px 12px; font-size:12.5px; }
    .welcome-hint .wh-action { min-height:36px; }
    .empty { width:100%; min-height:calc(100% - 58px); height:auto; grid-template-columns:minmax(0,1fr); align-items:center; padding:0 0 72px; }
    .empty > div { width:100%; min-width:0; max-width:100%; }
    .flow-title { max-width:300px; margin-left:auto; margin-right:auto; line-height:1.5; }
    .flow3 { width:100%; max-width:100%; gap:8px; flex-wrap:nowrap; justify-content:flex-start; overflow-x:auto; overflow-y:visible; padding:10px 8px 14px; scroll-snap-type:x proximity; }
    .flow-step { flex:0 0 94px; width:94px; height:118px; gap:8px; scroll-snap-align:start; }
    .flow-step .fs-ic { width:46px; height:46px; border-radius:14px; }
    .flow-step .fs-svg { width:24px; height:24px; }
    .flow-step .fs-tx { font-size:11.5px; }
    .flow-step .fs-no { transform:translate(-36px,-48px); }
    .flow-arrow { font-size:18px; }
    .outfit-example-flow { width:100%; }
    .outfit-case-grid { grid-template-columns:minmax(0,1fr) 16px minmax(0,1fr) 16px minmax(0,1fr); gap:4px; padding:0 6px; box-sizing:border-box; }
    .outfit-case-card { padding:5px 5px 7px; border-radius:12px; }
    .outfit-case-photo { border-radius:8px; }
    .outfit-case-photo span { top:4px; left:4px; width:19px; height:19px; font-size:9px; }
    .outfit-case-card figcaption { min-height:29px; padding-top:5px; font-size:9.5px; }
    .outfit-case-arrow { font-size:17px; transform:translateY(-13px); }
    .empty-actions { width:100%; max-width:100%; flex-direction:column; }
    .empty-actions .btn { width:100%; max-width:300px; }
    .empty-proof { max-width:100%; padding:0 12px; }

    /* 第三百四十五轮:手机结果区改 2 列——原强制 1 列每张 ~508px 高,批量 4 张要滑 3-4 屏;
       2 列后每张 ~180 宽 ~240 高,一屏可比 4 张 */
    .results { grid-template-columns:repeat(2, minmax(0,1fr)); gap:10px; }
    .rcard .ract { display:none; }

    /* 触控目标:所有主要按钮 ≥44px 高;chip/tab 略小但 ≥38 */
    .btn { min-height:44px; padding:12px 20px; font-size:14.5px; }
    .sub-chip { min-height:38px; padding:10px 14px; font-size:13px; }
    .ct-btn { min-height:40px; padding:10px 14px; }

    /* 输入元素字号 ≥16px 防 iOS focus 时页面被强制放大 */
    /* 第三百四十五轮:补 .pv-input / .pv-select / .dh-select / select,admin 面板供应商配置里的 pv-input 和所有下拉 focus 会触发缩放 */
    textarea, input[type="text"], input[type="email"], input[type="number"], input[type="password"], .prompt-box, .input,
    .pv-input, .pv-select, .dh-select, select {
      font-size:16px !important;
    }

    /* 顶栏在手机稍微收窄 */
    .topbar { height:56px; padding:0 12px; gap:8px; }
    .logo .mark { width:30px; height:30px; }

    /* 大图查看器手机:关闭/切换按钮达到 44 */
    .lb-close { width:44px; height:44px; top:12px; right:12px; font-size:20px; }
    .lb-nav { width:44px; height:44px; font-size:22px; }

    /* 4 列小上传槽在手机改 3 列避免每个方框宽度不够点 */
    .uploads.extras { grid-template-columns:repeat(3,1fr); }

    /* 参数标题 & feat-head 更紧凑 */
    .feat-head h1 { font-size:20px; }
    .feat-head p { font-size:13.5px; }

    /* 充值视图手机单列 */
    .rv-grid { grid-template-columns:1fr !important; }
  }
  /* 详情页三套件：沿用现有暗色设计系统，信息结构与桌面版参数/流程对齐 */
  .params:has(.detail-shell) { min-width:min(650px,calc(100vw - 500px)); padding-bottom:0; }
  .detail-shell { display:flex; flex-direction:column; gap:16px; padding-bottom:22px; }
  .detail-head { margin-bottom:0; }
  .detail-head .sub-chips { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); }
  .detail-head .sub-chip { border:0; cursor:pointer; text-align:center; }
  .detail-flow { display:flex; align-items:center; padding:13px 15px; border:1px solid var(--glass-bd); border-radius:16px; background:rgba(255,255,255,.025); overflow:hidden; }
  .detail-flow i { flex:1; height:1px; min-width:8px; background:rgba(255,255,255,.09); }
  .detail-flow-step { display:flex; align-items:center; gap:6px; min-width:0; color:var(--ink-dim); }
  .detail-flow-step span { width:25px; height:25px; flex:0 0 25px; display:grid; place-items:center; border-radius:50%; background:rgba(255,255,255,.07); border:1px solid rgba(255,255,255,.1); font-size:11px; font-weight:800; }
  .detail-flow-step b { font-size:11px; white-space:nowrap; }
  .detail-flow-step.active,.detail-flow-step.done { color:var(--ink); }
  .detail-flow-step.active span { background:var(--grad); border-color:transparent; color:#fff; box-shadow:0 0 20px rgba(183,111,255,.25); }
  .detail-flow-step.done span { color:#75e0bd; border-color:rgba(117,224,189,.3); background:rgba(117,224,189,.08); }
  .detail-mode-tabs { display:grid; grid-template-columns:repeat(3,1fr); gap:8px; padding:5px; border:1px solid var(--glass-bd); border-radius:15px; background:rgba(255,255,255,.025); }
  .detail-mode-tabs.two { width:min(100%,380px); align-self:center; grid-template-columns:1fr 1fr; }
  .detail-mode-tabs button,.detail-models button,.detail-quality button,.detail-prompt-actions button,.detail-action-row button,.detail-card-head>button,.detail-plan-head-actions button { appearance:none; border:1px solid var(--glass-bd); border-radius:11px; color:var(--ink-soft); background:rgba(255,255,255,.035); padding:10px 12px; font:inherit; font-size:12.5px; font-weight:700; cursor:pointer; transition:.18s ease; }
  .detail-mode-tabs button:not(:disabled):hover,.detail-models button:not(:disabled):hover,.detail-quality button:not(:disabled):hover,.detail-prompt-actions button:not(:disabled):hover,.detail-action-row button:not(:disabled):hover,.detail-card-head>button:not(:disabled):hover,.detail-plan-head-actions button:not(:disabled):hover { color:var(--ink); border-color:rgba(198,151,255,.45); transform:translateY(-1px); }
  .detail-mode-tabs button.active,.detail-models button.active,.detail-quality button.active { color:#fff; border-color:transparent; background:var(--grad); box-shadow:0 8px 20px rgba(177,98,245,.18); }
  .detail-card { border:1px solid var(--glass-bd); border-radius:17px; padding:16px; background:rgba(255,255,255,.022); }
  .detail-card-head { display:flex; justify-content:space-between; align-items:flex-start; gap:14px; margin-bottom:13px; }
  .detail-card-head>div { min-width:0; }
  .detail-card-head b { display:block; font-size:14px; color:var(--ink); }
  .detail-card-head small { display:block; margin-top:5px; font-size:11.5px; line-height:1.45; color:var(--ink-dim); }
  .detail-card-head>span { color:var(--ink-soft); font-size:12px; font-weight:750; }
  .detail-card-head>button { padding:6px 10px; font-size:11px; }
  .detail-upload-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:9px; }
  .detail-upload-grid.single { grid-template-columns:1fr; }
  .detail-upload { position:relative; min-width:0; aspect-ratio:4/3; overflow:hidden; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:4px; color:var(--ink-soft); border:1px dashed rgba(255,255,255,.16); border-radius:13px; background:rgba(8,8,18,.38); cursor:pointer; font:inherit; transition:border-color .16s ease,background .16s ease,box-shadow .16s ease,transform .16s ease; }
  .detail-upload-grid:not(.single) .detail-upload { height:clamp(128px,8.2vw,156px); aspect-ratio:auto; }
  .detail-upload:hover { border-color:rgba(190,131,255,.62); background:rgba(180,104,255,.06); }
  .detail-upload.drag { border-color:#ba82ff; background:rgba(170,92,240,.14); box-shadow:inset 0 0 0 1px rgba(186,130,255,.42),0 10px 30px rgba(92,45,145,.2); transform:translateY(-2px); }
  .detail-upload-grid.single .detail-upload { aspect-ratio:2.3/1; }
  .detail-upload.has-img { border-style:solid; }
  /* 第三百三十五轮：详情页素材是商品身份依据，预览必须看全原图，不再用 cover 裁掉头部、下摆或细节。 */
  .detail-upload img { width:100%; height:100%; object-fit:contain; object-position:center; background:rgba(5,5,12,.72); transition:opacity .16s ease; }
  .detail-upload.drag img { opacity:.34; }
  .detail-upload b { font-size:11.5px; }
  .detail-upload small { color:var(--ink-dim); font-size:10px; }
  .detail-upload-plus { font-size:24px; line-height:1; color:#c7a0ff; font-weight:300; }
  .detail-upload-index { position:absolute; left:7px; top:7px; min-width:21px; height:21px; padding:0 5px; display:grid; place-items:center; border-radius:99px; background:rgba(10,10,18,.76); color:#fff; font-size:10px; font-weight:800; backdrop-filter:blur(8px); }
  .detail-upload-remove { position:absolute; right:7px; top:7px; width:24px; height:24px; display:grid; place-items:center; border-radius:50%; background:rgba(10,10,18,.8); color:#fff; font-size:16px; line-height:1; opacity:0; transition:.15s; }
  .detail-upload:hover .detail-upload-remove,.detail-upload:focus-visible .detail-upload-remove { opacity:1; }
  .detail-output-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:11px; }
  .detail-select { display:flex; flex-direction:column; gap:6px; min-width:0; }
  .detail-select>span { color:var(--ink-dim); font-size:11px; font-weight:700; }
  .detail-select select { width:100%; min-width:0; height:42px; appearance:auto; border:1px solid var(--glass-bd); border-radius:11px; background:#151521; color:var(--ink); padding:0 10px; font:inherit; font-size:12px; outline:none; }
  .detail-select select:focus { border-color:#a970ee; box-shadow:0 0 0 3px rgba(169,112,238,.12); }
  .detail-prompt { width:100%; min-height:132px; resize:vertical; border:1px solid var(--glass-bd); border-radius:13px; background:#11111a; color:var(--ink); padding:13px 14px; font:inherit; font-size:12.5px; line-height:1.65; outline:none; }
  .detail-prompt.is-storyboard { min-height:240px; }
  /* 忙碌样式只认卡片的 aria-busy：readonly 还被防自动填充守卫复用（未聚焦时常驻），不能当忙碌标志。 */
  .detail-prompt-card[aria-busy="true"] .detail-prompt { cursor:wait; opacity:.78; }
  .detail-prompt:focus,.detail-scenes textarea:focus,.detail-scenes input:focus { border-color:#a970ee; box-shadow:0 0 0 3px rgba(169,112,238,.1); }
  .detail-prompt-actions { display:grid; grid-template-columns:1fr 1fr; gap:8px; margin-top:10px; }
  .detail-prompt-actions button.is-loading { border-color:rgba(169,112,238,.5); color:var(--ink); opacity:1; }
  .detail-prompt-actions button.is-loading::before { content:''; display:inline-block; width:12px; height:12px; margin-right:7px; border:2px solid currentColor; border-right-color:transparent; border-radius:50%; vertical-align:-2px; animation:detail-spin .75s linear infinite; }
  .detail-ai-progress { position:relative; display:grid; grid-template-columns:auto 1fr; gap:2px 9px; align-items:center; margin-top:9px; padding:11px 12px 10px; overflow:hidden; border:1px solid rgba(169,112,238,.3); border-radius:10px; background:rgba(169,112,238,.06); color:var(--ink); }
  .detail-ai-progress>span { grid-row:1/3; width:16px; height:16px; border:2px solid rgba(169,112,238,.28); border-top-color:#a970ee; border-radius:50%; animation:detail-spin .75s linear infinite; }
  .detail-ai-progress b { font-size:11.5px; line-height:1.35; }
  .detail-ai-progress small { color:var(--ink-dim); font-size:10.5px; line-height:1.35; }
  .detail-ai-progress::after { content:''; position:absolute; left:0; bottom:0; width:36%; height:2px; background:#a970ee; animation:detail-progress 1.25s ease-in-out infinite; }
  @keyframes detail-spin { to { transform:rotate(360deg); } }
  @keyframes detail-progress { 0% { transform:translateX(-110%); } 100% { transform:translateX(380%); } }
  .detail-prompt-actions button:disabled,.detail-action-row button:disabled,.detail-plan-head-actions button:disabled,.detail-primary-action:disabled { opacity:.42; cursor:not-allowed; transform:none; }
  .detail-models,.detail-quality { display:flex; flex-wrap:wrap; gap:7px; margin-bottom:11px; }
  .detail-models button { flex:1 1 130px; }
  .detail-quality button { flex:1; padding:8px; }
  .detail-plan-card { border-color:rgba(173,112,240,.34); background:rgba(158,90,224,.045); }
  .detail-plan-head-actions { display:flex; flex-wrap:wrap; justify-content:flex-end; gap:7px; }
  .detail-plan-head-actions button { padding:6px 10px; font-size:11px; }
  .detail-plan-list { display:flex; flex-direction:column; }
  .detail-plan-item { padding:12px 0; border-top:1px solid var(--glass-bd); }
  .detail-plan-item:first-child { padding-top:0; border-top:0; }
  .detail-plan-overview { display:grid; grid-template-columns:28px minmax(0,1fr); gap:10px; align-items:start; }
  .detail-plan-overview>span { width:28px; height:28px; display:grid; place-items:center; border-radius:50%; background:rgba(176,101,240,.15); color:#d9b4ff; font-size:10px; font-weight:800; }
  .detail-plan-overview b { display:block; color:var(--ink); font-size:12.5px; line-height:1.45; }
  .detail-plan-overview p { display:-webkit-box; margin:4px 0 0; overflow:hidden; color:var(--ink-dim); font-size:11.5px; line-height:1.55; white-space:pre-line; -webkit-box-orient:vertical; -webkit-line-clamp:3; }
  .detail-plan-item details { margin:8px 0 0 38px; }
  .detail-plan-item summary { width:max-content; max-width:100%; color:var(--ink-soft); font-size:11px; font-weight:700; cursor:pointer; }
  .detail-plan-item textarea { width:100%; min-height:116px; margin-top:8px; resize:vertical; border:1px solid var(--glass-bd); border-radius:10px; background:rgba(8,8,16,.56); color:var(--ink-soft); padding:9px 10px; font:inherit; font-size:11.5px; line-height:1.5; outline:none; }
  .detail-ai-options { border-color:rgba(117,224,189,.28); background:rgba(70,186,150,.04); }
  .detail-ai-tabs { display:flex; gap:7px; margin-bottom:10px; overflow-x:auto; }
  .detail-ai-tabs button { min-height:34px; padding:7px 10px; border:1px solid var(--glass-bd); border-radius:9px; background:rgba(255,255,255,.035); color:var(--ink-soft); font:700 11px/1.3 inherit; cursor:pointer; white-space:nowrap; }
  .detail-ai-tabs button.active { border-color:rgba(117,224,189,.55); background:rgba(117,224,189,.1); color:var(--ink); }
  .detail-ai-editor { width:100%; min-height:140px; resize:vertical; border:1px solid var(--glass-bd); border-radius:10px; background:#11111a; color:var(--ink-soft); padding:10px; font:inherit; font-size:11.5px; line-height:1.55; outline:none; }
  .detail-ai-editor:focus { border-color:#75e0bd; box-shadow:0 0 0 3px rgba(117,224,189,.08); }
  .detail-ai-colors { margin-top:7px; color:var(--ink-dim); font-size:10.5px; }
  .detail-ai-actions { display:grid; grid-template-columns:1fr 1fr; gap:8px; margin-top:10px; }
  .detail-ai-actions>button:not(.detail-primary-action) { border:1px solid var(--glass-bd); border-radius:11px; background:rgba(255,255,255,.035); color:var(--ink-soft); font:700 12px/1.3 inherit; cursor:pointer; }
  .detail-ai-actions .detail-primary-action { min-height:42px; font-size:12px; }
  .detail-gen { position:relative; bottom:auto; margin:0; padding:2px 0 22px; z-index:auto; background:none; }
  .detail-ready-error { margin-top:8px; color:#d5a5b1; font-size:11px; text-align:center; }
  .detail-video-prompt { min-height:180px; }
  .detail-video-actions { display:flex; flex-direction:column; gap:10px; }
  .detail-primary-action { width:100%; min-height:46px; border:0; border-radius:12px; color:#fff; background:var(--grad); font:inherit; font-size:13px; font-weight:800; cursor:pointer; }
  .detail-action-row { display:grid; grid-template-columns:1fr 1fr; gap:9px; }
  .detail-action-row button { min-height:43px; }
  .detail-audio-name { color:var(--ink-dim); font-size:11px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .detail-scenes { display:flex; flex-direction:column; gap:12px; }
  .detail-scenes article { display:grid; grid-template-columns:108px 1fr; gap:12px; padding:11px; border:1px solid rgba(255,255,255,.07); border-radius:13px; background:rgba(8,8,16,.38); }
  .detail-scene-thumb { width:108px; aspect-ratio:9/16; overflow:hidden; display:grid; place-items:center; border-radius:10px; background:rgba(255,255,255,.045); color:#d1a9ff; font-size:25px; font-weight:850; }
  .detail-scene-thumb img { width:100%; height:100%; object-fit:cover; }
  .detail-scene-body { min-width:0; display:flex; flex-direction:column; gap:8px; }
  .detail-scene-body>div { display:flex; align-items:center; gap:6px; }
  .detail-scene-body>div b { flex:1; min-width:0; font-size:12px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .detail-scene-body>div input { width:50px; }
  .detail-scene-body>div em { color:var(--ink-dim); font-style:normal; font-size:10px; }
  .detail-scenes label { display:grid; grid-template-columns:72px 1fr; gap:8px; align-items:start; color:var(--ink-dim); font-size:10.5px; }
  .detail-scenes input,.detail-scenes textarea { min-width:0; width:100%; border:1px solid var(--glass-bd); border-radius:8px; background:#11111a; color:var(--ink-soft); padding:7px 8px; font:inherit; font-size:11px; line-height:1.4; outline:none; }
  .detail-scenes textarea { min-height:58px; resize:vertical; }
  @media (max-width:980px) {
    .params:has(.detail-shell) { min-width:0; }
    .detail-gen { margin-left:-20px; margin-right:-20px; padding-left:20px; padding-right:20px; }
  }
  @media (max-width:560px) {
    .detail-mode-tabs.two { width:100%; }
    .detail-head .sub-chips { grid-template-columns:1fr; }
    .detail-flow-step b { display:none; }
    .detail-upload-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }
    .detail-upload-grid:not(.single) .detail-upload { height:116px; }
    .detail-output-grid { grid-template-columns:1fr; }
    .detail-prompt-actions,.detail-ai-actions { grid-template-columns:1fr; }
    .detail-plan-item details { margin-left:0; }
    .detail-scenes article { grid-template-columns:78px 1fr; }
    .detail-scene-thumb { width:78px; }
    .detail-scenes label { grid-template-columns:1fr; gap:4px; }
  }
  @media (prefers-reduced-motion: reduce) {
    *, *::before, *::after { animation-duration:.01ms !important; animation-iteration-count:1 !important; transition-duration:.01ms !important; scroll-behavior:auto !important; }
  }

  /* 2026-07-26 · 参考截图黑紫主题：仅调整颜色，不改变布局与交互。 */
  :root {
    --c1:#8b5cf6;
    --c2:#a78bfa;
    --c3:#c4b5fd;
    --grad:linear-gradient(115deg,#a78bfa,#8b5cf6 55%,#6d28d9);
    --grad-soft:linear-gradient(115deg,rgba(167,139,250,.17),rgba(109,40,217,.15));
  }
  ::selection { background:rgba(139,92,246,.34); }
  .aurora { opacity:.36; }
  .blob.b1 { background:#312e81; }
  .blob.b2 { background:#4c1d95; }
  .btn-primary { box-shadow:0 6px 24px rgba(109,40,217,.38); }
  .btn-primary:hover { box-shadow:0 12px 36px rgba(139,92,246,.48); }
  .tt-canvas {
    border-color:rgba(139,92,246,.38);
    color:#c4b5fd;
    background:rgba(139,92,246,.06);
  }
  .tt-canvas:hover {
    border-color:rgba(167,139,250,.58);
    background:rgba(139,92,246,.11);
    color:#ddd6fe;
  }
  .tt-canvas.active {
    border-color:rgba(167,139,250,.78);
    background:rgba(139,92,246,.14);
    color:#ede9fe;
  }
  .tt-canvas .tt-canvas-spark { color:#c4b5fd; }
  .balance-pill .bp-icon {
    background:linear-gradient(145deg,rgba(167,139,250,.2),rgba(109,40,217,.12));
    color:#ddd6fe;
  }
  .empty-proof span::before { color:#c4b5fd; }

  /* 2026-07-27 · 工作台白天 / 黑夜模式。黑夜模式保持原设计，白天模式只重映射视觉 token。 */
  .theme-switch {
    display:inline-grid; grid-template-columns:1fr 1fr; align-items:center; gap:2px; flex:0 0 auto;
    min-width:112px; padding:3px; border:1px solid var(--glass-bd); border-radius:999px;
    background:var(--glass); box-shadow:inset 0 1px 0 rgba(255,255,255,.035);
  }
  .theme-switch button {
    min-width:0; height:30px; padding:0 10px; border:0; border-radius:999px; background:transparent;
    color:var(--ink-dim); font:700 11.5px/1 inherit; cursor:pointer; transition:color .18s var(--ease),background .18s var(--ease),box-shadow .18s var(--ease);
  }
  .theme-switch button:hover { color:var(--ink); }
  .theme-switch button:focus-visible { outline:2px solid rgba(139,92,246,.55); outline-offset:2px; }
  .theme-switch button.active { background:var(--bg-soft); color:var(--ink); box-shadow:0 3px 10px rgba(0,0,0,.22); }

  /* 顶栏功能图标统一为浅蓝；品牌 Logo 和用户头像保留原识别色。 */
  .home-btn .hb-ic {
    filter:brightness(0) saturate(100%) invert(77%) sepia(25%) saturate(1192%) hue-rotate(166deg) brightness(102%) contrast(98%);
  }
  .topbar .tt-cat .ic,
  .tt-dropdown .tt-opt .ic { filter:none; color:#7dd3fc; }
  .tt-canvas .tt-canvas-spark,
  .balance-pill .bp-icon { color:#7dd3fc; }

  html[data-theme="light"] {
    --bg:#f4f4f5; --bg-soft:#ffffff; --panel:#f1f1f7;
    --glass:rgba(63,52,91,.055); --glass-2:rgba(63,52,91,.09); --glass-bd:rgba(62,48,94,.14);
    --ink:#211d2f; --ink-soft:#625d72; --ink-dim:#8a8498;
    --c1:#7c3aed; --c2:#8b5cf6; --c3:#6d28d9;
    --grad:linear-gradient(115deg,#a78bfa,#7c3aed 55%,#6d28d9);
    --grad-soft:linear-gradient(115deg,rgba(139,92,246,.13),rgba(109,40,217,.09));
    --slot-preview-matte:#fff;
  }
  html[data-theme="light"] ::selection { background:rgba(124,58,237,.2); }
  html[data-theme="light"] ::-webkit-scrollbar-thumb { background:rgba(54,43,79,.14); }
  html[data-theme="light"] ::-webkit-scrollbar-thumb:hover { background:rgba(54,43,79,.24); }
  html[data-theme="light"] body { background:var(--bg); color:var(--ink); }
  html[data-theme="light"] .aurora { opacity:.52; }
  html[data-theme="light"] .blob { mix-blend-mode:multiply; filter:blur(105px); }
  html[data-theme="light"] .blob.b1 { background:#ddd6fe; }
  html[data-theme="light"] .blob.b2 { background:#ede9fe; }
  html[data-theme="light"] .topbar { background:rgba(255,255,255,.82); box-shadow:0 1px 18px rgba(45,33,70,.045); }
  /* 白天侧栏:原来是带紫调的 rgba(249,248,253,.88),而工作台自 2026-08-04 起已是纯黑白,
     纯白正文旁边压一层淡紫是这块面板"看着脏"的主因之一。改成中性浅灰底 + 实描边,
     组内所有分隔线统一走 #ececec(与顶栏 border-bottom 同一档),不再各写各的透明度。 */
  html[data-theme="light"] .admin-console-nav { background:#fbfbfb; border-right-color:#ececec; }
  html[data-theme="light"] .admin-nav-head,
  html[data-theme="light"] .admin-nav-group + .admin-nav-group,
  html[data-theme="light"] .admin-nav-tail { border-color:#ececec; }
  /* 白天现行项:#eee 底 + #111 字 + #111 竖条。原来是 --grad-soft(#f3f3f3)配 1px #e2e2e2 描边,
     在纯白背景上几乎看不出选中了哪一项。 */
  html[data-theme="light"] .admin-nav-btn.active { background:#eeeeee; }
  html[data-theme="light"] .admin-nav-btn:hover { background:#f5f5f5; }
  /* --ink-dim(#8a8a8a)在 #fbfbfb 上只有约 3.0:1,11px 小字不够 AA;#6b6b6b 约 5.1:1 */
  html[data-theme="light"] .admin-nav-group-title { color:#6b6b6b; }
  html[data-theme="light"] .admin-filter-chip { border-color:rgba(2,132,199,.28); background:rgba(2,132,199,.07); }
  html[data-theme="light"] .admin-filter-chip button { background:rgba(2,132,199,.1); color:#0369a1; }
  html[data-theme="light"] .admin-filter-chip button:hover { background:rgba(2,132,199,.18); }
  html[data-theme="light"] .admin-page-kicker { color:#0e7490; }
  html[data-theme="light"] .mobile-nav { background:rgba(250,249,253,.88); }
  html[data-theme="light"] .theme-switch { background:rgba(75,61,103,.06); box-shadow:inset 0 1px 0 rgba(255,255,255,.8); }
  html[data-theme="light"] .theme-switch button.active { background:#fff; color:#5b21b6; box-shadow:0 3px 10px rgba(52,39,78,.13); }
  html[data-theme="light"] .home-btn:hover,
  html[data-theme="light"] .tt-cat:hover,
  html[data-theme="light"] .tt-opt:hover { border-color:rgba(73,54,112,.24); }
  html[data-theme="light"] .tt-canvas { color:#6d28d9; border-color:rgba(109,40,217,.25); background:rgba(124,58,237,.055); }
  html[data-theme="light"] .tt-canvas:hover,
  html[data-theme="light"] .tt-canvas.active { color:#5b21b6; border-color:rgba(109,40,217,.46); background:rgba(124,58,237,.11); }
  html[data-theme="light"] .topbar .tt-cat .ic,
  html[data-theme="light"] .tt-dropdown .tt-opt .ic,
  html[data-theme="light"] .feat-head .fh-icon { color:#0284c7; }
  html[data-theme="light"] .clothing-official-library-button { color:#111827; }
  html[data-theme="light"] .tt-opt-rich .ic { background:#edf7ff; }
  html[data-theme="light"] .tt-opt-rich:hover { border-color:rgba(42,120,184,.2); box-shadow:0 8px 20px rgba(30,70,110,.06); }
  html[data-theme="light"] .tt-opt-rich .tt-opt-enter { color:#6f8294; }
  html[data-theme="light"] .tt-opt-rich:hover .tt-opt-enter { color:#2a78b8; }
  html[data-theme="light"] .balance-pill { background:rgba(255,255,255,.72); border-color:rgba(73,54,112,.13); box-shadow:0 4px 15px rgba(45,33,70,.045); }
  html[data-theme="light"] .balance-pill:hover { background:#fff; box-shadow:0 8px 22px rgba(45,33,70,.1); }
  html[data-theme="light"] .balance-pill .bp-action { border-left-color:rgba(73,54,112,.12); color:#6d28d9; }
  html[data-theme="light"] .amount-grid .amt .ag { color:#047857; }
  html[data-theme="light"] .amount-grid .amt .ah { color:#625d72; }
  html[data-theme="light"] .amount-grid .amt .ad { color:#6d28d9; }
  html[data-theme="light"] .wallet-support { background:linear-gradient(135deg,rgba(109,40,217,.08),rgba(14,165,233,.05)); }
  html[data-theme="light"] .wallet-support-wechat { background:#fff; border-color:rgba(109,40,217,.18); }
  html[data-theme="light"] .desktop-buy-badge { color:#047857; border-color:rgba(4,120,87,.30); background:rgba(16,185,129,.10); }
  html[data-theme="light"] .acct-menu,
  html[data-theme="light"] .tt-dropdown { background:#fff; box-shadow:0 24px 60px rgba(43,31,70,.16); }
  html[data-theme="light"] .acct-head,
  html[data-theme="light"] .acct-div { border-color:rgba(62,48,94,.11); }
  html[data-theme="light"] .detail-flow i,
  html[data-theme="light"] .acct-div { background:rgba(62,48,94,.11); }

  html[data-theme="light"] .dc-card,
  html[data-theme="light"] .detail-card,
  html[data-theme="light"] .detail-flow,
  html[data-theme="light"] .detail-mode-tabs,
  html[data-theme="light"] .field-card,
  html[data-theme="light"] .dh-section,
  html[data-theme="light"] .retouch-card,
  html[data-theme="light"] .uv-card,
  html[data-theme="light"] .pv-card { background:rgba(255,255,255,.64); }
  html[data-theme="light"] .dc-setting-button-trigger { background:rgba(255,255,255,.8); border-color:rgba(79,62,112,.16); color:#262231; }
  html[data-theme="light"] .dc-setting-button-trigger:hover { background:#fff; border-color:rgba(109,40,217,.28); }
  html[data-theme="light"] .dc-setting-menu { background:#fff; border-color:rgba(79,62,112,.14); box-shadow:0 16px 42px rgba(45,33,70,.16); }
  html[data-theme="light"] .dc-setting-option { background:rgba(72,55,107,.045); border-color:rgba(79,62,112,.13); color:#625d70; }
  html[data-theme="light"] .dc-setting-option:hover, html[data-theme="light"] .dc-setting-option.active { color:#262231; background:rgba(124,58,237,.08); }
  html[data-theme="light"] .slot,
  html[data-theme="light"] .detail-upload { background:rgba(255,255,255,.46); border-color:rgba(79,62,112,.18); }
  html[data-theme="light"] .slot:hover,
  html[data-theme="light"] .detail-upload:hover { background:rgba(124,58,237,.055); }
  html[data-theme="light"] .detail-upload img { background:#f0eef5; }
  html[data-theme="light"] .slot.has-img,
  html[data-theme="light"] .slot.has-img:hover,
  html[data-theme="light"] .slot.has-img.drag,
  html[data-theme="light"] .slot img { background:var(--slot-preview-matte); }
  html[data-theme="light"] .detail-flow-step span { background:rgba(72,55,107,.07); border-color:rgba(72,55,107,.11); }
  html[data-theme="light"] .detail-select select,
  html[data-theme="light"] .detail-prompt,
  html[data-theme="light"] .detail-plan-item textarea,
  html[data-theme="light"] .detail-ai-editor,
  html[data-theme="light"] .detail-scenes input,
  html[data-theme="light"] .detail-scenes textarea,
  html[data-theme="light"] .dc-input,
  html[data-theme="light"] .prompt-box,
  html[data-theme="light"] .input,
  html[data-theme="light"] .pv-input,
  html[data-theme="light"] .pv-select,
  html[data-theme="light"] .dh-select { background:#fff; color:var(--ink); }
  html[data-theme="light"] input::placeholder,
  html[data-theme="light"] textarea::placeholder { color:#9a94a8; }
  html[data-theme="light"] .detail-plan-card { background:rgba(124,58,237,.045); }
  html[data-theme="light"] .detail-ai-options { background:rgba(22,163,116,.035); }
  html[data-theme="light"] .detail-scenes article { background:rgba(255,255,255,.62); border-color:rgba(62,48,94,.12); }
  html[data-theme="light"] .detail-ai-tabs button,
  html[data-theme="light"] .detail-ai-actions>button:not(.detail-primary-action),
  html[data-theme="light"] .detail-mode-tabs button,
  html[data-theme="light"] .detail-models button,
  html[data-theme="light"] .detail-quality button,
  html[data-theme="light"] .detail-prompt-actions button,
  html[data-theme="light"] .detail-action-row button,
  html[data-theme="light"] .detail-card-head>button,
  html[data-theme="light"] .detail-plan-head-actions button { background:rgba(255,255,255,.7); }
  html[data-theme="light"] .detail-mode-tabs button.active,
  html[data-theme="light"] .detail-models button.active,
  html[data-theme="light"] .detail-quality button.active { color:#fff; background:var(--grad); }
  html[data-theme="light"] .canvas-head .ch-hint,
  html[data-theme="light"] .ch-scope .chs-btn { color:#787187; }
  html[data-theme="light"] .ch-scope { background:rgba(65,50,96,.055); border-color:rgba(65,50,96,.1); }
  html[data-theme="light"] .ch-scope .chs-btn.active { background:#fff; box-shadow:0 2px 7px rgba(45,33,70,.08); }
  html[data-theme="light"] .empty-proof { color:#777083; }
  html[data-theme="light"] .empty-proof span::before { color:#6d28d9; }
  html[data-theme="light"] .flow-step .fs-ic { color:#0284c7; border-color:rgba(2,132,199,.18); background:rgba(14,165,233,.07); box-shadow:inset 0 1px 0 rgba(255,255,255,.8),0 10px 28px rgba(2,132,199,.07); }
  html[data-theme="light"] .flow-step:hover .fs-ic { border-color:rgba(2,132,199,.35); background:rgba(14,165,233,.11); }
  html[data-theme="light"] body.ziyou-mode,
  html[data-theme="light"] body.ziyou-mode .canvas { background:#f3f3f6; }
  html[data-theme="light"] body.ziyou-mode .topbar { background:rgba(255,255,255,.9); border-color:rgba(62,48,94,.1); }
  html[data-theme="light"] body.ziyou-mode .zj-day,
  html[data-theme="light"] body.ziyou-mode .zj-hello,
  html[data-theme="light"] body.ziyou-mode .zj-prompt { color:#202027; }
  html[data-theme="light"] body.ziyou-mode .zj-hello {
    background:linear-gradient(120deg,#282332 28%,#6d28d9 78%);
    -webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent;
  }
  html[data-theme="light"] body.ziyou-mode .zj-hello-sub { color:#817b8d; }
  html[data-theme="light"] body.ziyou-mode .zj-card,
  html[data-theme="light"] body.ziyou-mode .zj-panel,
  html[data-theme="light"] body.ziyou-mode .zj-atmenu,
  html[data-theme="light"] body.ziyou-mode .zj-mmenu { background:#fff; color:#202027; border-color:rgba(32,32,39,.1); }
  /* AI 画布白天模式不能只换外层背景：记录流、图片留白、详情条、停靠渐变和 composer
     都有独立的深色皮肤。这里完整重映射交互表面；压在图片上的 hover 工具条仍保留深色以保证可读性。 */
  html[data-theme="light"] body.ziyou-mode .home-btn,
  html[data-theme="light"] body.ziyou-mode .balance-pill {
    background:rgba(255,255,255,.86); border-color:rgba(65,50,96,.12); color:#514b60;
    box-shadow:0 3px 12px rgba(45,33,70,.055);
  }
  html[data-theme="light"] body.ziyou-mode .home-btn:hover,
  html[data-theme="light"] body.ziyou-mode .balance-pill:hover { background:#fff; border-color:rgba(109,40,217,.2); }
  html[data-theme="light"] body.ziyou-mode .balance-pill .bp-value {
    color:#0284c7; -webkit-text-fill-color:#0284c7;
  }
  html[data-theme="light"] body.ziyou-mode .canvas::-webkit-scrollbar-thumb { background:rgba(54,43,79,.14); }
  html[data-theme="light"] body.ziyou-mode .canvas::-webkit-scrollbar-thumb:hover { background:rgba(54,43,79,.24); }
  html[data-theme="light"] body.ziyou-mode .zj-daysep { color:#8a8498; }
  html[data-theme="light"] body.ziyou-mode .zj-prompt .zj-meta,
  html[data-theme="light"] body.ziyou-mode .zj-status { color:#817b8d; }
  html[data-theme="light"] body.ziyou-mode .zj-prompt .zj-meta i { color:#c8c4d0; }
  html[data-theme="light"] body.ziyou-mode .zj-info { color:#6f687d; border-bottom-color:#aaa5b5; }
  html[data-theme="light"] body.ziyou-mode .zj-info:hover { color:#5b21b6; }
  html[data-theme="light"] body.ziyou-mode .zj-detail {
    background:#fff; border-color:rgba(65,50,96,.11); box-shadow:0 4px 14px rgba(45,33,70,.035);
  }
  html[data-theme="light"] body.ziyou-mode .zj-detail .zj-dr span { color:#8a8498; }
  html[data-theme="light"] body.ziyou-mode .zj-detail .zj-dr b { color:#3f394b; }
  html[data-theme="light"] body.ziyou-mode .zj-toolbtn,
  html[data-theme="light"] body.ziyou-mode .zj-act,
  html[data-theme="light"] body.ziyou-mode .zj-chip {
    background:#fff; color:#514b60; border-color:rgba(65,50,96,.12);
    box-shadow:0 2px 8px rgba(45,33,70,.035);
  }
  html[data-theme="light"] body.ziyou-mode .zj-toolbtn:hover,
  html[data-theme="light"] body.ziyou-mode .zj-act:hover,
  html[data-theme="light"] body.ziyou-mode .zj-chip:hover {
    background:#faf9fd; color:#282332; border-color:rgba(109,40,217,.24);
  }
  html[data-theme="light"] body.ziyou-mode .zj-cell {
    border-color:#e3e3e3; box-shadow:0 2px 8px rgba(0,0,0,.035);
  }
  html[data-theme="light"] body.ziyou-mode .zj-cell:not(.pending):not(.failed) {
    background:var(--slot-preview-matte);
  }
  html[data-theme="light"] body.ziyou-mode .zj-cell:not(.pending):hover {
    border-color:#c8c8c8; box-shadow:0 12px 28px rgba(0,0,0,.09);
  }
  html[data-theme="light"] body.ziyou-mode .zj-cell img {
    background:var(--slot-preview-matte);
  }
  html[data-theme="light"] body.ziyou-mode .zj-cell.pending {
    background:radial-gradient(circle at 50% 45%,#f7f5fb,#e9e7ef 76%);
  }
  html[data-theme="light"] body.ziyou-mode .zj-cell .zj-prog {
    color:#514b60; background:rgba(255,255,255,.88); border:1px solid rgba(65,50,96,.1);
  }
  html[data-theme="light"] body.ziyou-mode .zj-status .zj-queue {
    color:#655f70; background:#fff; border-color:rgba(65,50,96,.11);
  }
  html[data-theme="light"] body.ziyou-mode #zyComposer.docked {
    background:linear-gradient(transparent,#f3f3f6 34%);
  }
  html[data-theme="light"] body.ziyou-mode .zj-card {
    background:#fff; border-color:rgba(65,50,96,.13); box-shadow:0 12px 34px rgba(45,33,70,.1);
  }
  html[data-theme="light"] body.ziyou-mode .zj-card:focus-within { border-color:rgba(109,40,217,.34); }
  html[data-theme="light"] body.ziyou-mode .zj-card-video {
    border-color:rgba(219,39,119,.24); box-shadow:0 0 0 1px rgba(219,39,119,.05),0 12px 30px rgba(88,55,104,.1);
  }
  html[data-theme="light"] body.ziyou-mode .zj-card-video ~ .zj-mode-hint {
    background:rgba(219,39,119,.065); border-color:rgba(219,39,119,.22); color:#9d174d;
  }
  html[data-theme="light"] body.ziyou-mode .zj-input { color:#282332; }
  html[data-theme="light"] body.ziyou-mode .zj-input::placeholder { color:#9a94a8; }
  html[data-theme="light"] body.ziyou-mode .jm-charcount { color:#9993a4; }
  html[data-theme="light"] body.ziyou-mode .zj-import {
    background:#f1f2f6; color:#7b7488; border-color:rgba(65,50,96,.12);
    background-image:linear-gradient(135deg,transparent 40%,rgba(14,165,233,.07) 60%,transparent 80%);
  }
  html[data-theme="light"] body.ziyou-mode .zj-import:hover {
    background:#e9eaf0; color:#4f485b; border-color:rgba(2,132,199,.32); box-shadow:0 6px 16px rgba(45,33,70,.1);
  }
  html[data-theme="light"] body.ziyou-mode .zj-ref { border-color:rgba(65,50,96,.16); background:#eef0f5; }
  html[data-theme="light"] body.ziyou-mode .zj-ref-add {
    border-color:rgba(65,50,96,.24); color:#827b8e; background:rgba(75,61,103,.035);
  }
  html[data-theme="light"] body.ziyou-mode .zj-ref-add:hover { border-color:#0284c7; color:#0284c7; background:rgba(14,165,233,.055); }
  html[data-theme="light"] body.ziyou-mode .zj-fav-btn {
    background:#f1f2f6; border-color:rgba(65,50,96,.12); color:#6f687d;
  }
  html[data-theme="light"] body.ziyou-mode .zj-fav-btn:hover { color:#0284c7; border-color:rgba(2,132,199,.35); }
  html[data-theme="light"] body.ziyou-mode .zj-chip .cd,
  html[data-theme="light"] body.ziyou-mode .zj-chip .caret { color:#9993a4; }
  html[data-theme="light"] body.ziyou-mode .zj-chip.brand,
  html[data-theme="light"] body.ziyou-mode .zj-chip.brand .caret { color:#0284c7; }
  html[data-theme="light"] body.ziyou-mode .zj-cost { color:#817b8d; }
  html[data-theme="light"] body.ziyou-mode .zj-cost .spark { color:#0ea5e9; }
  html[data-theme="light"] body.ziyou-mode .zj-send { background:#6d28d9; color:#fff; box-shadow:0 4px 12px rgba(109,40,217,.18); }
  html[data-theme="light"] body.ziyou-mode .zj-send:hover { background:#5b21b6; }
  html[data-theme="light"] body.ziyou-mode .zj-send:disabled,
  html[data-theme="light"] body.ziyou-mode .zj-send.zs-busy {
    background:#e5e3ea; color:#9a94a8; border-color:rgba(65,50,96,.08); box-shadow:none;
  }
  html[data-theme="light"] body.ziyou-mode .zj-send.zs-busy::before {
    border-color:rgba(65,50,96,.13); border-top-color:#7c3aed;
  }
  html[data-theme="light"] body.ziyou-mode .zj-panel,
  html[data-theme="light"] body.ziyou-mode .zj-atmenu,
  html[data-theme="light"] body.ziyou-mode .zj-mmenu {
    background:#fff; border-color:rgba(65,50,96,.13); box-shadow:0 18px 44px rgba(45,33,70,.16);
  }
  html[data-theme="light"] body.ziyou-mode .zj-panel .pt,
  html[data-theme="light"] body.ziyou-mode .zj-mmenu .mt,
  html[data-theme="light"] body.ziyou-mode .zj-atmenu .at-hint { color:#817b8d; }
  html[data-theme="light"] body.ziyou-mode .zj-ratio { color:#817b8d; }
  html[data-theme="light"] body.ziyou-mode .zj-ratio:hover { background:rgba(75,61,103,.055); color:#3f394b; }
  html[data-theme="light"] body.ziyou-mode .zj-ratio.active { background:#eeeaf7; color:#5b21b6; }
  html[data-theme="light"] body.ziyou-mode .zj-tier { background:#f2f1f6; color:#655f70; }
  html[data-theme="light"] body.ziyou-mode .zj-tier:hover { color:#3f394b; }
  html[data-theme="light"] body.ziyou-mode .zj-tier.active { background:#e9e5f3; color:#5b21b6; border-color:rgba(109,40,217,.2); }
  html[data-theme="light"] body.ziyou-mode .zj-tier .tp,
  html[data-theme="light"] body.ziyou-mode .zj-panel .zj-hint { color:#8a8498; }
  html[data-theme="light"] body.ziyou-mode .zj-mopt:hover,
  html[data-theme="light"] body.ziyou-mode .zj-atmenu .at-item:hover,
  html[data-theme="light"] body.ziyou-mode .zj-atmenu .at-item.kbd-active { background:rgba(75,61,103,.055); }
  html[data-theme="light"] body.ziyou-mode .zj-mopt.active,
  html[data-theme="light"] body.ziyou-mode .zj-atmenu .at-tab.active { background:#eeeaf7; }
  html[data-theme="light"] body.ziyou-mode .zj-mopt .mi { background:#f0eef5; }
  html[data-theme="light"] body.ziyou-mode .zj-mopt .mn,
  html[data-theme="light"] body.ziyou-mode .zj-atmenu .at-item .mn { color:#3f394b; }
  html[data-theme="light"] body.ziyou-mode .zj-mopt .md,
  html[data-theme="light"] body.ziyou-mode .zj-atmenu .at-item .md,
  html[data-theme="light"] body.ziyou-mode .zj-atmenu .at-empty { color:#817b8d; }
  html[data-theme="light"] body.ziyou-mode .zj-atmenu .at-tabs { border-bottom-color:rgba(65,50,96,.1); }
  html[data-theme="light"] body.ziyou-mode .zj-atmenu .at-tab { color:#817b8d; }
  html[data-theme="light"] body.ziyou-mode .zj-atmenu .at-tab:hover { color:#3f394b; }
  html[data-theme="light"] body.ziyou-mode .zj-atmenu .at-search {
    background:#f5f4f8; border-color:rgba(65,50,96,.12); color:#3f394b;
  }
  html[data-theme="light"] body.ziyou-mode .zj-atmenu .at-search::placeholder { color:#9a94a8; }
  html[data-theme="light"] body.ziyou-mode .zj-cell.img-broken .zj-cell-broken { background:#eeedf3; color:#817b8d; }
  html[data-theme="light"] body.ziyou-mode .zj-cell.img-broken .zj-cell-broken .ebtn {
    background:#fff; border-color:rgba(65,50,96,.14); color:#514b60;
  }
  html[data-theme="light"] body.ziyou-mode .zj-mode-hint {
    background:rgba(14,165,233,.07); border-color:rgba(2,132,199,.22); color:#075985;
  }
  html[data-theme="light"] body.ziyou-mode .zj-mode-hint .mh-x { color:#817b8d; }

  /* 供应商管理页浅色皮肤：解析下拉框和原始报错块原本写死了深色表面。
     路由总表与模型标签的覆写已随对应深色规则一起删除。 */
  html[data-theme="light"] .pv-analysis-model-control {
    background:rgba(124,58,237,.045); border-color:rgba(109,40,217,.14); color:#625d72;
  }
  html[data-theme="light"] .pv-analysis-model-control select {
    background:#fff; border-color:rgba(109,40,217,.22); color:#282332; box-shadow:none;
  }
  html[data-theme="light"] .pv-analysis-model-control select:hover { border-color:rgba(109,40,217,.38); }
  html[data-theme="light"] .pv-analysis-model-control select:focus {
    border-color:#7c3aed; box-shadow:0 0 0 3px rgba(124,58,237,.1);
  }
  html[data-theme="light"] .pv-analysis-model-control select option { background:#fff; color:#282332; }
  html[data-theme="light"] .pv-kind-toggle-btn {
    background:rgba(65,50,96,.055); border-color:rgba(65,50,96,.12); color:#6f687d;
  }
  html[data-theme="light"] .pv-recent-raw code { background:#f0eef4; color:#b91c1c; }
  @media (max-width:640px) {
    .theme-switch { min-width:88px; }
    .theme-switch button { height:28px; padding:0 6px; font-size:10.5px; }
  }
  @media (max-width:480px) {
    .theme-switch { min-width:78px; }
    .theme-switch button { padding:0 4px; font-size:10px; }
  }

  /* 2026-07-31 · 工作台天蓝分层：#9CCFFF 只做高光，主操作用有支撑的蓝。 */
  :root {
    --c1:#2a78b8;
    --c2:#4b9bd4;
    --c3:#9ccfff;
    --grad:linear-gradient(115deg,#3a86c4,#2a78b8 62%,#236da8);
    --grad-soft:linear-gradient(115deg,rgba(156,207,255,.14),rgba(42,120,184,.12));
  }
  ::selection { background:rgba(156,207,255,.34); }
  .btn-primary { box-shadow:0 4px 12px rgba(30,70,110,.10); }
  .btn-primary:hover { box-shadow:0 8px 18px rgba(30,70,110,.14); }
  .balance-pill:hover { border-color:rgba(75,155,212,.38); }
  .balance-pill:focus-visible {
    border-color:rgba(42,120,184,.66);
    box-shadow:0 0 0 3px rgba(42,120,184,.18);
  }
  .balance-pill.active {
    border-color:rgba(75,155,212,.48);
    box-shadow:inset 0 0 0 1px rgba(75,155,212,.18);
  }
  .balance-pill .bp-icon {
    background:rgba(156,207,255,.15);
    color:#9ccfff;
  }
  .theme-switch button:focus-visible { outline-color:rgba(42,120,184,.58); }
  .btn-primary,
  .logo .mark,
  .hzg-combo.active,
  .flow-step .fs-no,
  .tt-opt .badge-new,
  .detail-flow-step.active span,
  .m-params-fab { color:#fff; }
  .hzg-combo.active { box-shadow:0 4px 12px rgba(30,70,110,.12); }
  .empty-proof span::before { color:#9ccfff; }
  @keyframes onboardPulse {
    50% { border-color:#9ccfff; box-shadow:0 0 0 5px rgba(42,120,184,.16),0 0 18px rgba(30,70,110,.12); }
  }

  html[data-theme="light"] {
    --bg:#f4f4f5;
    --bg-soft:#ffffff;
    --panel:#f6fafe;
    --glass:rgba(30,70,110,.045);
    --glass-2:rgba(30,70,110,.075);
    --glass-bd:rgba(30,70,110,.12);
    --ink:#1c2c3c;
    --ink-soft:#526579;
    --ink-dim:#8494a3;
    --c1:#2a78b8;
    --c2:#4b9bd4;
    --c3:#639fd4;
    --grad:linear-gradient(115deg,#3a86c4,#2a78b8 62%,#236da8);
    --grad-soft:linear-gradient(115deg,#f5fbff,#edf7ff);
  }
  html[data-theme="light"] ::selection { background:rgba(156,207,255,.25); }
  html[data-theme="light"] .blob.b1 { background:#edf7ff; }
  html[data-theme="light"] .blob.b2 { background:#f5fbff; }
  html[data-theme="light"] .theme-switch button.active { color:#639fd4; }
  html[data-theme="light"] .tt-canvas {
    color:#639fd4;
    border-color:rgba(99,159,212,.26);
    background:rgba(156,207,255,.08);
  }
  html[data-theme="light"] .tt-canvas:hover,
  html[data-theme="light"] .tt-canvas.active {
    color:#4d8cc4;
    border-color:rgba(99,159,212,.42);
    background:rgba(156,207,255,.13);
  }
  html[data-theme="light"] .balance-pill { border-color:rgba(30,70,110,.12); box-shadow:0 4px 15px rgba(30,70,110,.045); }
  html[data-theme="light"] .balance-pill .bp-action { color:#2a78b8; }
  html[data-theme="light"] .dc-setting-button-trigger:hover { border-color:rgba(42,120,184,.30); }
  html[data-theme="light"] .dc-setting-option:hover,
  html[data-theme="light"] .dc-setting-option.active { background:#edf7ff; }
  html[data-theme="light"] .slot:hover,
  html[data-theme="light"] .detail-upload:hover { background:#edf7ff; }
  html[data-theme="light"] .detail-plan-card { background:#f5fbff; }
  html[data-theme="light"] .empty-proof span::before { color:#2a78b8; }

  /* 高光蓝只出现于图标、细边与浅选中面；主要操作保持足够的白底对比。 */
  .btn-primary,
  .hzg-combo.active,
  .logo .mark,
  .avatar,
  .flow-step .fs-no,
  .tt-opt .badge-new,
  .detail-flow-step.active span { background:#2a78b8; color:#fff; }
  .btn-primary:hover,
  .hzg-combo.active:hover { background:#236da8; }
  .logo .mark,
  .avatar { box-shadow:inset 0 1px 0 rgba(156,207,255,.62); }
  .flow-step .fs-ic { color:#9ccfff; border-color:rgba(156,207,255,.45); background:rgba(156,207,255,.08); }
  .flow-arrow { color:#2a78b8; }
  .pill.active,
  .tt-cat.active,
  .tt-opt.active { background:#edf7ff; color:#1e466e; border-color:#4b9bd4; }
  html[data-theme="light"] .topbar { box-shadow:0 1px 18px rgba(30,70,110,.045); }
  html[data-theme="light"] .flow-step .fs-ic {
    color:#2a78b8; border-color:rgba(156,207,255,.82); background:#edf7ff;
    box-shadow:inset 0 1px 0 rgba(255,255,255,.9),0 8px 20px rgba(30,70,110,.055);
  }
  html[data-theme="light"] .flow-step:hover .fs-ic { border-color:#4b9bd4; background:#e6f4ff; }

  /* 2026-08-04 · 首页同款黑白工作台。布局不动，只收敛颜色、表面层级与交互反馈。 */
  html[data-theme="light"] {
    --bg:#ffffff;
    --bg-soft:#ffffff;
    --panel:#ffffff;
    --glass:#f5f5f5;
    --glass-2:#eeeeee;
    --glass-bd:#e2e2e2;
    --ink:#111111;
    --ink-soft:#555555;
    --ink-dim:#8a8a8a;
    --c1:#111111;
    --c2:#2b2b2b;
    --c3:#111111;
    --grad:#111111;
    --grad-soft:#f3f3f3;
    --slot-preview-matte:#fff;
  }
  html[data-theme="light"] ::selection { background:#1a1a1a; color:#fff; }
  html[data-theme="light"] ::-webkit-scrollbar-thumb { background:#d4d4d4; }
  html[data-theme="light"] ::-webkit-scrollbar-thumb:hover { background:#bdbdbd; }
  html[data-theme="light"] body { background:#fff; color:#111; }
  html[data-theme="light"] .aurora { display:none; }

  /* 顶栏：白底、黑色品牌标记，当前入口才使用实心黑。 */
  html[data-theme="light"] .topbar {
    background:rgba(255,255,255,.96);
    border-bottom-color:#ececec;
    box-shadow:0 1px 0 rgba(0,0,0,.025);
  }
  html[data-theme="light"] .logo .mark,
  html[data-theme="light"] .avatar {
    background:#111;
    color:#fff;
    box-shadow:none;
  }
  html[data-theme="light"] .logo .mark { border-radius:8px; }
  html[data-theme="light"] .topbar .tt-cat .ic,
  html[data-theme="light"] .tt-dropdown .tt-opt .ic,
  html[data-theme="light"] .feat-head .fh-icon,
  html[data-theme="light"] .tt-canvas .tt-canvas-spark { color:currentColor; }
  html[data-theme="light"] .tt-cat,
  html[data-theme="light"] .tt-opt {
    color:#666;
    transition:background .16s var(--ease),color .16s var(--ease),transform .16s var(--ease),box-shadow .16s var(--ease);
  }
  html[data-theme="light"] .tt-cat:hover,
  html[data-theme="light"] .tt-opt:hover { border-color:transparent; background:#f3f3f3; color:#111; }
  html[data-theme="light"] .tt-cat:active,
  html[data-theme="light"] .tt-opt:active { transform:scale(.98); }
  html[data-theme="light"] .tt-cat.active,
  html[data-theme="light"] .tt-opt.active {
    border-color:#111;
    background:#111;
    color:#fff;
    box-shadow:none;
  }
  html[data-theme="light"] .tt-canvas {
    border-color:#dedede;
    background:#fff;
    color:#555;
  }
  html[data-theme="light"] .tt-canvas:hover { border-color:#bcbcbc; background:#f5f5f5; color:#111; }
  html[data-theme="light"] .tt-canvas.active { border-color:#111; background:#111; color:#fff; }
  html[data-theme="light"] .tt-dropdown,
  html[data-theme="light"] .acct-menu,
  html[data-theme="light"] .dc-setting-menu {
    border-color:#e3e3e3;
    background:#fff;
    box-shadow:0 18px 50px rgba(0,0,0,.12);
  }
  html[data-theme="light"] .tt-opt-rich .ic { background:#f2f2f2; color:#222; }
  html[data-theme="light"] .tt-opt-rich:hover { border-color:#dedede; box-shadow:none; }
  html[data-theme="light"] .tt-opt-rich.active { border-color:#111; }
  html[data-theme="light"] .tt-opt-rich .tt-opt-enter,
  html[data-theme="light"] .tt-opt-rich:hover .tt-opt-enter { color:currentColor; }
  html[data-theme="light"] .tt-opt .badge-new { background:#111; color:#fff; }

  /* 顶栏操作：默认轻、主动作黑，悬停和按下都有克制反馈。 */
  html[data-theme="light"] .theme-switch { border-color:#e5e5e5; background:#f3f3f3; box-shadow:none; }
  html[data-theme="light"] .theme-switch button { color:#777; }
  html[data-theme="light"] .theme-switch button:hover { color:#111; }
  html[data-theme="light"] .theme-switch button.active { background:#111; color:#fff; box-shadow:none; }
  html[data-theme="light"] .home-btn,
  html[data-theme="light"] .balance-pill {
    border-color:#dedede;
    background:#fff;
    color:#444;
    box-shadow:none;
  }
  html[data-theme="light"] .home-btn .hb-ic { filter:grayscale(1); }
  html[data-theme="light"] .home-btn:hover,
  html[data-theme="light"] .balance-pill:hover {
    border-color:#a8a8a8;
    background:#f7f7f7;
    color:#111;
    box-shadow:0 6px 16px rgba(0,0,0,.06);
  }
  html[data-theme="light"] .home-btn:active,
  html[data-theme="light"] .balance-pill:active { transform:translateY(0) scale(.98); box-shadow:none; }
  html[data-theme="light"] .balance-pill .bp-icon { background:#f1f1f1; color:#222; }
  html[data-theme="light"] .balance-pill .bp-value { background:none; color:#111; -webkit-text-fill-color:#111; }
  html[data-theme="light"] .balance-pill .bp-action { border-left-color:#e5e5e5; color:#111; }
  html[data-theme="light"] .desktop-entry-btn {
    border-color:#111;
    background:#111;
    color:#fff;
    box-shadow:none;
  }
  html[data-theme="light"] .desktop-entry-btn:hover { border-color:#2b2b2b; background:#2b2b2b; transform:translateY(-1px); }
  html[data-theme="light"] .desktop-entry-btn:active { transform:translateY(0) scale(.98); }
  html[data-theme="light"] .desktop-expiry-dot { background:#fff; box-shadow:0 0 0 3px rgba(255,255,255,.18); }

  /* 主工作区维持原左右布局，用极浅灰只区分结果画布。 */
  html[data-theme="light"] .params { border-right-color:#ececec; background:#fff; }
  html[data-theme="light"] .canvas { background:#fafafa; }
  html[data-theme="light"] .params-resizer:hover::before,
  html[data-theme="light"] .params-resizer.dragging::before { background:#111; }
  html[data-theme="light"] .field-label .req { color:#111; }
  html[data-theme="light"] .field-label .ai-write { border-color:#dedede; background:#fff; color:#555; }
  html[data-theme="light"] .field-label .ai-write:hover { border-color:#111; color:#111; box-shadow:none; }
  html[data-theme="light"] .hzg-task-remove {
    border-color:#e2e2e2; background:#fff; color:#666; box-shadow:0 1px 2px rgba(0,0,0,.04);
  }
  html[data-theme="light"] .hzg-task-remove:hover {
    border-color:#ef4444; background:#ef4444; color:#fff; box-shadow:0 6px 16px rgba(239,68,68,.22);
  }

  /* 统一按钮语言：黑色主按钮、白色次按钮、灰色禁用态。 */
  html[data-theme="light"] .btn {
    transition:background .16s var(--ease),border-color .16s var(--ease),color .16s var(--ease),transform .16s var(--ease),box-shadow .16s var(--ease);
  }
  html[data-theme="light"] .btn-primary,
  html[data-theme="light"] .gen-btn,
  html[data-theme="light"] .detail-primary-action {
    border-color:#111;
    background:#111;
    color:#fff;
    box-shadow:0 5px 14px rgba(0,0,0,.13);
  }
  html[data-theme="light"] .btn-primary:hover,
  html[data-theme="light"] .gen-btn:not(:disabled):hover,
  html[data-theme="light"] .detail-primary-action:not(:disabled):hover {
    border-color:#292929;
    background:#292929;
    transform:translateY(-1px);
    box-shadow:0 8px 18px rgba(0,0,0,.16);
  }
  html[data-theme="light"] .btn-primary:active,
  html[data-theme="light"] .gen-btn:not(:disabled):active,
  html[data-theme="light"] .detail-primary-action:not(:disabled):active {
    transform:translateY(0) scale(.985);
    box-shadow:0 2px 6px rgba(0,0,0,.12);
  }
  html[data-theme="light"] .btn-primary:disabled,
  html[data-theme="light"] .gen-btn:disabled,
  html[data-theme="light"] .detail-primary-action:disabled {
    border-color:#e5e5e5;
    background:#e5e5e5;
    color:#9a9a9a;
    opacity:1;
    box-shadow:none;
    cursor:not-allowed;
  }
  html[data-theme="light"] .btn-ghost,
  html[data-theme="light"] .ct-btn {
    border-color:#dedede;
    background:#fff;
    color:#444;
    box-shadow:none;
  }
  html[data-theme="light"] .btn-ghost:hover,
  html[data-theme="light"] .ct-btn:hover {
    border-color:#b8b8b8;
    background:#f5f5f5;
    color:#111;
    transform:translateY(-1px);
  }
  html[data-theme="light"] .btn-ghost:active,
  html[data-theme="light"] .ct-btn:active { transform:translateY(0) scale(.98); }

  /* 选择控件：未选白底，选中实心黑，状态不再依赖蓝紫色。 */
  html[data-theme="light"] .pill,
  html[data-theme="light"] .sub-chip,
  html[data-theme="light"] .hzg-combo,
  html[data-theme="light"] .detail-mode-tabs button,
  html[data-theme="light"] .detail-models button,
  html[data-theme="light"] .detail-quality button,
  html[data-theme="light"] .detail-ai-tabs button {
    border-color:#dedede;
    background:#fff;
    color:#555;
    box-shadow:none;
    transition:background .16s var(--ease),border-color .16s var(--ease),color .16s var(--ease),transform .16s var(--ease),box-shadow .16s var(--ease);
  }
  html[data-theme="light"] .pill:hover,
  html[data-theme="light"] .sub-chip:hover,
  html[data-theme="light"] .hzg-combo:hover,
  html[data-theme="light"] .detail-mode-tabs button:hover,
  html[data-theme="light"] .detail-models button:hover,
  html[data-theme="light"] .detail-quality button:hover,
  html[data-theme="light"] .detail-ai-tabs button:hover {
    border-color:#aaa;
    background:#f5f5f5;
    color:#111;
    transform:translateY(-1px);
  }
  html[data-theme="light"] .pill.active,
  html[data-theme="light"] .sub-chip.active,
  html[data-theme="light"] .hzg-combo.active,
  html[data-theme="light"] .detail-mode-tabs button.active,
  html[data-theme="light"] .detail-models button.active,
  html[data-theme="light"] .detail-quality button.active,
  html[data-theme="light"] .detail-ai-tabs button.active {
    border-color:#111;
    background:#111;
    color:#fff;
    box-shadow:none;
  }
  html[data-theme="light"] .pill:active,
  html[data-theme="light"] .sub-chip:active { transform:translateY(0) scale(.98); }

  /* 上传、输入与设置菜单：用边框变化反馈，不引入彩色高光。 */
  html[data-theme="light"] .slot,
  html[data-theme="light"] .detail-upload,
  html[data-theme="light"] .retouch-dropzone,
  html[data-theme="light"] .dc-upload {
    border-color:#d7d7d7;
    background:#fff;
    box-shadow:none;
    transition:border-color .16s var(--ease),background .16s var(--ease),transform .16s var(--ease),box-shadow .16s var(--ease);
  }
  html[data-theme="light"] .slot:hover,
  html[data-theme="light"] .detail-upload:hover,
  html[data-theme="light"] .retouch-dropzone:hover,
  html[data-theme="light"] .dc-upload:hover {
    border-color:#777;
    background:#fafafa;
    transform:translateY(-1px);
    box-shadow:0 7px 18px rgba(0,0,0,.055);
  }
  html[data-theme="light"] .slot.drag { border-color:#111; background:#f2f2f2; box-shadow:0 0 0 3px rgba(0,0,0,.08); }
  html[data-theme="light"] .slot.has-img { border-color:#dedede; background:var(--slot-preview-matte); }
  html[data-theme="light"] .slot.has-img:hover,
  html[data-theme="light"] .slot.has-img.drag { background:var(--slot-preview-matte); }
  html[data-theme="light"] .slot img { background:var(--slot-preview-matte); }
  html[data-theme="light"] .detail-upload img { background:#f3f3f3; }
  html[data-theme="light"] .slot .si { filter:none; }
  html[data-theme="light"] .slot-sync:hover,
  html[data-theme="light"] .slot-repl:hover { background:#b8481f; }
  html[data-theme="light"] .dc-setting-button-trigger,
  html[data-theme="light"] .dc-setting-option {
    border-color:#dedede;
    background:#fff;
    color:#444;
    box-shadow:none;
  }
  html[data-theme="light"] .dc-setting-button-trigger:hover,
  html[data-theme="light"] .dc-setting-option:hover { border-color:#aaa; background:#f5f5f5; color:#111; }
  html[data-theme="light"] .dc-setting-button.open .dc-setting-button-trigger,
  html[data-theme="light"] .dc-setting-button-trigger:focus-visible,
  html[data-theme="light"] .dc-setting-option.active { border-color:#111; background:#f2f2f2; color:#111; box-shadow:0 0 0 3px rgba(0,0,0,.07); }
  html[data-theme="light"] .detail-select select,
  html[data-theme="light"] .detail-prompt,
  html[data-theme="light"] .detail-plan-item textarea,
  html[data-theme="light"] .detail-ai-editor,
  html[data-theme="light"] .detail-scenes input,
  html[data-theme="light"] .detail-scenes textarea,
  html[data-theme="light"] .dc-input,
  html[data-theme="light"] .prompt-box,
  html[data-theme="light"] .input,
  html[data-theme="light"] .pv-input,
  html[data-theme="light"] .pv-select,
  html[data-theme="light"] .dh-select {
    border-color:#dedede;
    background:#fff;
    color:#111;
  }
  html[data-theme="light"] :is(input,textarea,select)::placeholder { color:#999; }
  html[data-theme="light"] :is(input,textarea,select):focus { border-color:#111; box-shadow:0 0 0 3px rgba(0,0,0,.07); }

  /* 参数卡和结果区：表面保持平静，图片卡悬停才浮起。 */
  html[data-theme="light"] .dc-card,
  html[data-theme="light"] .detail-card,
  html[data-theme="light"] .detail-flow,
  html[data-theme="light"] .detail-mode-tabs,
  html[data-theme="light"] .field-card,
  html[data-theme="light"] .dh-section,
  html[data-theme="light"] .retouch-card,
  html[data-theme="light"] .uv-card,
  html[data-theme="light"] .pv-card,
  html[data-theme="light"] .detail-scenes article {
    border-color:#e5e5e5;
    background:#fff;
    box-shadow:none;
  }
  html[data-theme="light"] .welcome-hint { border-color:#e5e5e5; background:#fff; color:#666; }
  html[data-theme="light"] .welcome-hint .wh-action { border-color:#111; background:#111; color:#fff; }
  html[data-theme="light"] .canvas-head h2 { color:#333; }
  html[data-theme="light"] .canvas-head .ch-hint { color:#888; }
  html[data-theme="light"] .ch-scope { border-color:#e3e3e3; background:#eee; }
  html[data-theme="light"] .ch-scope .chs-btn { color:#777; }
  html[data-theme="light"] .ch-scope .chs-btn:hover { color:#111; }
  html[data-theme="light"] .ch-scope .chs-btn.active { background:#111; color:#fff; box-shadow:none; }
  html[data-theme="light"] .empty-proof { color:#777; }
  html[data-theme="light"] .empty-proof span::before { color:#111; }
  html[data-theme="light"] .flow-step { border-color:#e5e5e5; background:#fff; }
  html[data-theme="light"] .flow-step:hover { border-color:#bbb; box-shadow:0 10px 24px rgba(0,0,0,.06); }
  html[data-theme="light"] .flow-step .fs-ic { border-color:#dedede; background:#f5f5f5; color:#222; box-shadow:none; }
  html[data-theme="light"] .flow-step:hover .fs-ic { border-color:#aaa; background:#eee; }
  html[data-theme="light"] .flow-step .fs-no { background:#111; color:#fff; }
  html[data-theme="light"] .flow-arrow { color:#555; }
  html[data-theme="light"] .rcard { border-color:#e3e3e3; background:#fff; box-shadow:0 2px 8px rgba(0,0,0,.035); transition:border-color .18s var(--ease),transform .18s var(--ease),box-shadow .18s var(--ease); }
  html[data-theme="light"] .rcard:hover { border-color:#c8c8c8; transform:translateY(-2px); box-shadow:0 12px 28px rgba(0,0,0,.09); }
  html[data-theme="light"] .rcard .rimg { background:var(--slot-preview-matte); }
  html[data-theme="light"] .rcard.failed .rimg { background:linear-gradient(160deg, #fef2f2, #fee2e2); }
  html[data-theme="light"] .lb-pane { background:#f4f4f6; }
  html[data-theme="light"] .skeleton { border-color:#e3e3e3; background:#f5f5f5; }
  html[data-theme="light"] .skel-ring .skel-ring-bg { stroke:#ddd; }
  html[data-theme="light"] .skel-ring .skel-ring-fg { stroke:#111; }
  html[data-theme="light"] .skel-bar-track { background:#ddd; }
  html[data-theme="light"] .skel-bar-fill { background:#111; }
  html[data-theme="light"] .skel-phase,
  html[data-theme="light"] .skel-time { color:#777; }
  html[data-theme="light"] .rb-dh-summary > span { background:#f1f1f1; color:#555; }

  /* AI 画布的白天皮肤也遵循相同黑白层级。 */
  html[data-theme="light"] body.ziyou-mode,
  html[data-theme="light"] body.ziyou-mode .canvas { background:#fafafa; }
  html[data-theme="light"] body.ziyou-mode .topbar { border-color:#ececec; background:rgba(255,255,255,.96); }
  html[data-theme="light"] body.ziyou-mode .zj-hello { background:none; color:#111; -webkit-text-fill-color:currentColor; }
  html[data-theme="light"] body.ziyou-mode .zj-hello-sub { color:#777; }
  html[data-theme="light"] body.ziyou-mode .zj-card,
  html[data-theme="light"] body.ziyou-mode .zj-panel,
  html[data-theme="light"] body.ziyou-mode .zj-atmenu,
  html[data-theme="light"] body.ziyou-mode .zj-mmenu,
  html[data-theme="light"] body.ziyou-mode .zj-detail { border-color:#e3e3e3; background:#fff; color:#111; box-shadow:0 8px 24px rgba(0,0,0,.06); }
  html[data-theme="light"] body.ziyou-mode .zj-toolbtn,
  html[data-theme="light"] body.ziyou-mode .zj-act,
  html[data-theme="light"] body.ziyou-mode .zj-chip { border-color:#dedede; background:#fff; color:#444; box-shadow:none; }
  html[data-theme="light"] body.ziyou-mode .zj-toolbtn:hover,
  html[data-theme="light"] body.ziyou-mode .zj-act:hover,
  html[data-theme="light"] body.ziyou-mode .zj-chip:hover { border-color:#aaa; background:#f3f3f3; color:#111; }

  /* 键盘与触屏反馈同样可见，且不改变任何业务行为。 */
  html[data-theme="light"] :where(a,button,input,textarea,select,[role="button"],[role="radio"],[role="tab"],[tabindex]):focus-visible {
    outline:2px solid #111;
    outline-offset:2px;
    box-shadow:0 0 0 4px rgba(0,0,0,.08);
  }
  @media (hover:none) {
    html[data-theme="light"] :where(button,.btn,.pill,.sub-chip,.tt-cat,.tt-opt,.slot):active { transform:scale(.985); }
  }
  @media (prefers-reduced-motion:reduce) {
    html[data-theme="light"] :where(button,.btn,.pill,.sub-chip,.tt-cat,.tt-opt,.slot,.rcard) { transition-duration:.01ms !important; }
  }

  @media (max-width:980px) {
    html[data-theme="light"] .m-feature-current { border-color:#dedede; background:#fff; color:#111; }
    html[data-theme="light"] .m-feature-current .mfc-icon { background:#f2f2f2; color:#222; }
    html[data-theme="light"] .m-feature-current .mfc-cat { color:#888; }
    html[data-theme="light"] .m-feature-switch { border-color:#111; background:#111; color:#fff; }
    html[data-theme="light"] .m-feature-sheet { border-color:#dedede; background:#fff; box-shadow:0 24px 64px rgba(0,0,0,.18); }
    html[data-theme="light"] .m-feature-sheet-head button,
    html[data-theme="light"] .m-feature-search,
    html[data-theme="light"] .m-feature-option { border-color:#e2e2e2; background:#fff; color:#555; }
    html[data-theme="light"] .m-feature-option:hover { background:#f5f5f5; color:#111; }
    html[data-theme="light"] .m-feature-option.active { border-color:#111; background:#111; color:#fff; }
    html[data-theme="light"] .m-feature-search::placeholder { color:#999; }
    html[data-theme="light"] .m-feature-group-title { color:#777; }
  }

  @media (max-width:768px) {
    html[data-theme="light"] .canvas-head .ch-hint { border-color:#e5e5e5; background:#fff; color:#777; }
    html[data-theme="light"] .params { border-top-color:#e5e5e5; background:#fff; box-shadow:0 -20px 56px rgba(0,0,0,.17); }
    html[data-theme="light"] body.mparams-open .params { color:#111; }
    html[data-theme="light"] .params .feat-head p,
    html[data-theme="light"] .params .field-label,
    html[data-theme="light"] .params .cost-detail,
    html[data-theme="light"] .params .extras-hint,
    html[data-theme="light"] .params .dh-hint { color:#666; }
    html[data-theme="light"] .params > .field { border-color:#ededed; background:#fafafa; }
    html[data-theme="light"] .params .hzg-task-list > .field.hzg-task-card { border-color:transparent; background:transparent; }
    html[data-theme="light"] .params .gen-bar { border-top-color:#e5e5e5; background:#fff; box-shadow:0 -12px 28px rgba(0,0,0,.08); }
    html[data-theme="light"] .m-param-overview { border-bottom-color:#e5e5e5; background:rgba(255,255,255,.98); }
    html[data-theme="light"] .m-param-progress,
    html[data-theme="light"] .m-param-progress.ready { color:#555; }
    html[data-theme="light"] .m-param-jumps button { border-color:#dedede; background:#fff; color:#666; }
    html[data-theme="light"] .m-param-jumps button:hover,
    html[data-theme="light"] .m-param-jumps button:focus-visible { border-color:#111; background:#111; color:#fff; }
    html[data-theme="light"] .params::before { background:#cfcfcf; }
  }

  /* 2026-08-04 · 黑夜模式同步收敛为纯黑白，不保留旧版蓝紫渐变与霓虹高光。 */
  html[data-theme="dark"] {
    --bg:#050505;
    --bg-soft:#111111;
    --panel:#090909;
    --glass:#151515;
    --glass-2:#202020;
    --glass-bd:#292929;
    --ink:#f5f5f5;
    --ink-soft:#b3b3b3;
    --ink-dim:#717171;
    --c1:#ffffff;
    --c2:#dedede;
    --c3:#ffffff;
    --grad:#ffffff;
    --grad-soft:#171717;
    --slot-preview-matte:#000;
  }
  html[data-theme="dark"] ::selection { background:#fff; color:#111; }
  html[data-theme="dark"] ::-webkit-scrollbar-thumb { background:#292929; }
  html[data-theme="dark"] ::-webkit-scrollbar-thumb:hover { background:#3b3b3b; }
  html[data-theme="dark"] body { background:#050505; color:#f5f5f5; }
  html[data-theme="dark"] .aurora { display:none; }

  html[data-theme="dark"] .topbar {
    border-bottom-color:#1e1e1e;
    background:rgba(5,5,5,.96);
    box-shadow:0 1px 0 rgba(255,255,255,.025);
  }
  html[data-theme="dark"] .logo .mark,
  html[data-theme="dark"] .avatar {
    background:#fff;
    color:#111;
    box-shadow:none;
  }
  html[data-theme="dark"] .logo .mark { border-radius:8px; }
  html[data-theme="dark"] .topbar .tt-cat .ic,
  html[data-theme="dark"] .tt-dropdown .tt-opt .ic,
  html[data-theme="dark"] .feat-head .fh-icon,
  html[data-theme="dark"] .tt-canvas .tt-canvas-spark { color:currentColor; }
  html[data-theme="dark"] .tt-cat,
  html[data-theme="dark"] .tt-opt {
    color:#a3a3a3;
    transition:background .16s var(--ease),color .16s var(--ease),transform .16s var(--ease),box-shadow .16s var(--ease);
  }
  html[data-theme="dark"] .tt-cat:hover,
  html[data-theme="dark"] .tt-opt:hover { background:#171717; color:#fff; }
  html[data-theme="dark"] .tt-cat:active,
  html[data-theme="dark"] .tt-opt:active { transform:scale(.98); }
  html[data-theme="dark"] .tt-cat.active,
  html[data-theme="dark"] .tt-opt.active {
    border-color:#fff;
    background:#fff;
    color:#111;
    box-shadow:none;
  }
  html[data-theme="dark"] .tt-canvas {
    border-color:#303030;
    background:#090909;
    color:#b8b8b8;
  }
  html[data-theme="dark"] .tt-canvas:hover { border-color:#666; background:#171717; color:#fff; }
  html[data-theme="dark"] .tt-canvas.active { border-color:#fff; background:#fff; color:#111; }
  html[data-theme="dark"] .tt-dropdown,
  html[data-theme="dark"] .acct-menu,
  html[data-theme="dark"] .dc-setting-menu {
    border-color:#2b2b2b;
    background:#111;
    box-shadow:0 20px 58px rgba(0,0,0,.65);
  }
  html[data-theme="dark"] .tt-opt-rich .ic { background:#1d1d1d; color:#eee; }
  html[data-theme="dark"] .tt-opt-rich:hover { border-color:#353535; box-shadow:none; }
  html[data-theme="dark"] .tt-opt-rich.active { border-color:#fff; }
  html[data-theme="dark"] .tt-opt-rich .tt-opt-enter,
  html[data-theme="dark"] .tt-opt-rich:hover .tt-opt-enter { color:currentColor; }
  html[data-theme="dark"] .tt-opt .badge-new { background:#fff; color:#111; }

  html[data-theme="dark"] .theme-switch { border-color:#2b2b2b; background:#171717; box-shadow:none; }
  html[data-theme="dark"] .theme-switch button { color:#777; }
  html[data-theme="dark"] .theme-switch button:hover { color:#fff; }
  html[data-theme="dark"] .theme-switch button.active { background:#fff; color:#111; box-shadow:none; }
  html[data-theme="dark"] .home-btn,
  html[data-theme="dark"] .balance-pill {
    border-color:#2b2b2b;
    background:#0c0c0c;
    color:#b8b8b8;
    box-shadow:none;
  }
  html[data-theme="dark"] .home-btn .hb-ic { filter:grayscale(1) brightness(1.7); }
  html[data-theme="dark"] .home-btn:hover,
  html[data-theme="dark"] .balance-pill:hover {
    border-color:#666;
    background:#171717;
    color:#fff;
    box-shadow:0 7px 18px rgba(0,0,0,.35);
  }
  html[data-theme="dark"] .home-btn:active,
  html[data-theme="dark"] .balance-pill:active { transform:translateY(0) scale(.98); box-shadow:none; }
  html[data-theme="dark"] .balance-pill .bp-icon { background:#1e1e1e; color:#eee; }
  html[data-theme="dark"] .balance-pill .bp-value { background:none; color:#fff; -webkit-text-fill-color:#fff; }
  html[data-theme="dark"] .balance-pill .bp-action { border-left-color:#292929; color:#fff; }
  html[data-theme="dark"] .desktop-entry-btn {
    border-color:#fff;
    background:#fff;
    color:#111;
    box-shadow:none;
  }
  html[data-theme="dark"] .desktop-entry-btn:hover { border-color:#dedede; background:#dedede; transform:translateY(-1px); }
  html[data-theme="dark"] .desktop-entry-btn:active { transform:translateY(0) scale(.98); }
  html[data-theme="dark"] .desktop-expiry-dot { background:#111; box-shadow:0 0 0 3px rgba(0,0,0,.15); }

  html[data-theme="dark"] .params { border-right-color:#202020; background:#080808; }
  html[data-theme="dark"] .canvas { background:#050505; }
  html[data-theme="dark"] .params-resizer:hover::before,
  html[data-theme="dark"] .params-resizer.dragging::before { background:#fff; }
  html[data-theme="dark"] .field-label .req { color:#fff; }
  html[data-theme="dark"] .field-label .ai-write { border-color:#303030; background:#101010; color:#aaa; }
  html[data-theme="dark"] .field-label .ai-write:hover { border-color:#fff; color:#fff; box-shadow:none; }
  html[data-theme="dark"] .hzg-task-remove {
    border-color:#303030; background:#151515; color:#aaa; box-shadow:none;
  }
  html[data-theme="dark"] .hzg-task-remove:hover {
    border-color:#ef4444; background:#ef4444; color:#fff; box-shadow:0 6px 16px rgba(239,68,68,.28);
  }

  html[data-theme="dark"] .btn {
    transition:background .16s var(--ease),border-color .16s var(--ease),color .16s var(--ease),transform .16s var(--ease),box-shadow .16s var(--ease);
  }
  html[data-theme="dark"] .btn-primary,
  html[data-theme="dark"] .gen-btn,
  html[data-theme="dark"] .detail-primary-action {
    border-color:#fff;
    background:#fff;
    color:#111;
    box-shadow:0 5px 16px rgba(0,0,0,.32);
  }
  html[data-theme="dark"] .btn-primary:hover,
  html[data-theme="dark"] .gen-btn:not(:disabled):hover,
  html[data-theme="dark"] .detail-primary-action:not(:disabled):hover {
    border-color:#dedede;
    background:#dedede;
    transform:translateY(-1px);
    box-shadow:0 9px 22px rgba(0,0,0,.4);
  }
  html[data-theme="dark"] .btn-primary:active,
  html[data-theme="dark"] .gen-btn:not(:disabled):active,
  html[data-theme="dark"] .detail-primary-action:not(:disabled):active {
    transform:translateY(0) scale(.985);
    box-shadow:0 2px 6px rgba(0,0,0,.32);
  }
  html[data-theme="dark"] .btn-primary:disabled,
  html[data-theme="dark"] .gen-btn:disabled,
  html[data-theme="dark"] .detail-primary-action:disabled {
    border-color:#242424;
    background:#242424;
    color:#696969;
    opacity:1;
    box-shadow:none;
    cursor:not-allowed;
  }
  html[data-theme="dark"] .btn-ghost,
  html[data-theme="dark"] .ct-btn {
    border-color:#303030;
    background:#101010;
    color:#c0c0c0;
    box-shadow:none;
  }
  html[data-theme="dark"] .btn-ghost:hover,
  html[data-theme="dark"] .ct-btn:hover {
    border-color:#666;
    background:#1c1c1c;
    color:#fff;
    transform:translateY(-1px);
  }
  html[data-theme="dark"] .btn-ghost:active,
  html[data-theme="dark"] .ct-btn:active { transform:translateY(0) scale(.98); }

  html[data-theme="dark"] .pill,
  html[data-theme="dark"] .sub-chip,
  html[data-theme="dark"] .hzg-combo,
  html[data-theme="dark"] .detail-mode-tabs button,
  html[data-theme="dark"] .detail-models button,
  html[data-theme="dark"] .detail-quality button,
  html[data-theme="dark"] .detail-ai-tabs button {
    border-color:#303030;
    background:#101010;
    color:#aaa;
    box-shadow:none;
    transition:background .16s var(--ease),border-color .16s var(--ease),color .16s var(--ease),transform .16s var(--ease),box-shadow .16s var(--ease);
  }
  html[data-theme="dark"] .pill:hover,
  html[data-theme="dark"] .sub-chip:hover,
  html[data-theme="dark"] .hzg-combo:hover,
  html[data-theme="dark"] .detail-mode-tabs button:hover,
  html[data-theme="dark"] .detail-models button:hover,
  html[data-theme="dark"] .detail-quality button:hover,
  html[data-theme="dark"] .detail-ai-tabs button:hover {
    border-color:#686868;
    background:#1b1b1b;
    color:#fff;
    transform:translateY(-1px);
  }
  html[data-theme="dark"] .pill.active,
  html[data-theme="dark"] .sub-chip.active,
  html[data-theme="dark"] .hzg-combo.active,
  html[data-theme="dark"] .detail-mode-tabs button.active,
  html[data-theme="dark"] .detail-models button.active,
  html[data-theme="dark"] .detail-quality button.active,
  html[data-theme="dark"] .detail-ai-tabs button.active {
    border-color:#fff;
    background:#fff;
    color:#111;
    box-shadow:none;
  }
  html[data-theme="dark"] .pill:active,
  html[data-theme="dark"] .sub-chip:active { transform:translateY(0) scale(.98); }

  html[data-theme="dark"] .slot,
  html[data-theme="dark"] .detail-upload,
  html[data-theme="dark"] .retouch-dropzone,
  html[data-theme="dark"] .dc-upload {
    border-color:#333;
    background:#0b0b0b;
    box-shadow:none;
    transition:border-color .16s var(--ease),background .16s var(--ease),transform .16s var(--ease),box-shadow .16s var(--ease);
  }
  html[data-theme="dark"] .slot:hover,
  html[data-theme="dark"] .detail-upload:hover,
  html[data-theme="dark"] .retouch-dropzone:hover,
  html[data-theme="dark"] .dc-upload:hover {
    border-color:#777;
    background:#131313;
    transform:translateY(-1px);
    box-shadow:0 8px 22px rgba(0,0,0,.3);
  }
  html[data-theme="dark"] .slot.drag { border-color:#fff; background:#191919; box-shadow:0 0 0 3px rgba(255,255,255,.09); }
  html[data-theme="dark"] .slot.has-img { border-color:#303030; background:var(--slot-preview-matte); }
  html[data-theme="dark"] .slot.has-img:hover,
  html[data-theme="dark"] .slot.has-img.drag { background:var(--slot-preview-matte); }
  html[data-theme="dark"] .slot img { background:var(--slot-preview-matte); }
  html[data-theme="dark"] .detail-upload img { background:#111; }
  html[data-theme="dark"] .slot .si { filter:none; }
  html[data-theme="dark"] .slot-sync:hover,
  html[data-theme="dark"] .slot-repl:hover { background:#b8481f; }
  html[data-theme="dark"] .dc-setting-button-trigger,
  html[data-theme="dark"] .dc-setting-option {
    border-color:#303030;
    background:#101010;
    color:#b5b5b5;
    box-shadow:none;
  }
  html[data-theme="dark"] .dc-setting-button-trigger:hover,
  html[data-theme="dark"] .dc-setting-option:hover { border-color:#666; background:#1b1b1b; color:#fff; }
  html[data-theme="dark"] .dc-setting-button.open .dc-setting-button-trigger,
  html[data-theme="dark"] .dc-setting-button-trigger:focus-visible,
  html[data-theme="dark"] .dc-setting-option.active { border-color:#fff; background:#1a1a1a; color:#fff; box-shadow:0 0 0 3px rgba(255,255,255,.08); }
  html[data-theme="dark"] .detail-select select,
  html[data-theme="dark"] .detail-prompt,
  html[data-theme="dark"] .detail-plan-item textarea,
  html[data-theme="dark"] .detail-ai-editor,
  html[data-theme="dark"] .detail-scenes input,
  html[data-theme="dark"] .detail-scenes textarea,
  html[data-theme="dark"] .dc-input,
  html[data-theme="dark"] .prompt-box,
  html[data-theme="dark"] .input,
  html[data-theme="dark"] .pv-input,
  html[data-theme="dark"] .pv-select,
  html[data-theme="dark"] .dh-select {
    border-color:#303030;
    background:#0d0d0d;
    color:#f5f5f5;
  }
  html[data-theme="dark"] :is(input,textarea,select)::placeholder { color:#666; }
  html[data-theme="dark"] :is(input,textarea,select):focus { border-color:#fff; box-shadow:0 0 0 3px rgba(255,255,255,.08); }

  html[data-theme="dark"] .dc-card,
  html[data-theme="dark"] .detail-card,
  html[data-theme="dark"] .detail-flow,
  html[data-theme="dark"] .detail-mode-tabs,
  html[data-theme="dark"] .field-card,
  html[data-theme="dark"] .dh-section,
  html[data-theme="dark"] .retouch-card,
  html[data-theme="dark"] .uv-card,
  html[data-theme="dark"] .pv-card,
  html[data-theme="dark"] .detail-scenes article {
    border-color:#292929;
    background:#0d0d0d;
    box-shadow:none;
  }
  html[data-theme="dark"] .welcome-hint { border-color:#292929; background:#0d0d0d; color:#aaa; }
  html[data-theme="dark"] .welcome-hint .wh-action { border-color:#fff; background:#fff; color:#111; }
  html[data-theme="dark"] .canvas-head h2 { color:#d0d0d0; }
  html[data-theme="dark"] .canvas-head .ch-hint { color:#747474; }
  html[data-theme="dark"] .ch-scope { border-color:#292929; background:#171717; }
  html[data-theme="dark"] .ch-scope .chs-btn { color:#888; }
  html[data-theme="dark"] .ch-scope .chs-btn:hover { color:#fff; }
  html[data-theme="dark"] .ch-scope .chs-btn.active { background:#fff; color:#111; box-shadow:none; }
  html[data-theme="dark"] .empty-proof { color:#777; }
  html[data-theme="dark"] .empty-proof span::before { color:#fff; }
  html[data-theme="dark"] .flow-step { border-color:#292929; background:#0d0d0d; }
  html[data-theme="dark"] .flow-step:hover { border-color:#5a5a5a; box-shadow:0 12px 30px rgba(0,0,0,.35); }
  html[data-theme="dark"] .flow-step .fs-ic { border-color:#333; background:#151515; color:#eee; box-shadow:none; }
  html[data-theme="dark"] .flow-step:hover .fs-ic { border-color:#707070; background:#1d1d1d; }
  html[data-theme="dark"] .flow-step .fs-no { background:#fff; color:#111; }
  html[data-theme="dark"] .flow-arrow { color:#aaa; }
  html[data-theme="dark"] .rcard { border-color:#292929; background:#0d0d0d; box-shadow:0 2px 8px rgba(0,0,0,.24); transition:border-color .18s var(--ease),transform .18s var(--ease),box-shadow .18s var(--ease); }
  html[data-theme="dark"] .rcard:hover { border-color:#555; transform:translateY(-2px); box-shadow:0 14px 34px rgba(0,0,0,.45); }
  html[data-theme="dark"] .rcard .rimg { background:var(--slot-preview-matte); }
  html[data-theme="dark"] .skeleton { border-color:#292929; background:#111; }
  html[data-theme="dark"] .skel-ring .skel-ring-bg { stroke:#303030; }
  html[data-theme="dark"] .skel-ring .skel-ring-fg { stroke:#fff; }
  html[data-theme="dark"] .skel-bar-track { background:#303030; }
  html[data-theme="dark"] .skel-bar-fill { background:#fff; }
  html[data-theme="dark"] .skel-phase,
  html[data-theme="dark"] .skel-time { color:#777; }
  html[data-theme="dark"] .rb-dh-summary > span { background:#1c1c1c; color:#aaa; }

  html[data-theme="dark"] body.ziyou-mode,
  html[data-theme="dark"] body.ziyou-mode .canvas { background:#050505; }
  html[data-theme="dark"] body.ziyou-mode .topbar { border-color:#1e1e1e; background:rgba(5,5,5,.96); }
  html[data-theme="dark"] body.ziyou-mode .zj-hello { background:none; color:#fff; -webkit-text-fill-color:currentColor; }
  html[data-theme="dark"] body.ziyou-mode .zj-hello-sub { color:#777; }
  html[data-theme="dark"] body.ziyou-mode .zj-card,
  html[data-theme="dark"] body.ziyou-mode .zj-panel,
  html[data-theme="dark"] body.ziyou-mode .zj-atmenu,
  html[data-theme="dark"] body.ziyou-mode .zj-mmenu,
  html[data-theme="dark"] body.ziyou-mode .zj-detail { border-color:#292929; background:#0d0d0d; color:#f5f5f5; box-shadow:0 10px 30px rgba(0,0,0,.4); }
  html[data-theme="dark"] body.ziyou-mode .zj-toolbtn,
  html[data-theme="dark"] body.ziyou-mode .zj-act,
  html[data-theme="dark"] body.ziyou-mode .zj-chip { border-color:#303030; background:#101010; color:#bbb; box-shadow:none; }
  html[data-theme="dark"] body.ziyou-mode .zj-toolbtn:hover,
  html[data-theme="dark"] body.ziyou-mode .zj-act:hover,
  html[data-theme="dark"] body.ziyou-mode .zj-chip:hover { border-color:#666; background:#1b1b1b; color:#fff; }

  html[data-theme="dark"] :where(a,button,input,textarea,select,[role="button"],[role="radio"],[role="tab"],[tabindex]):focus-visible {
    outline:2px solid #fff;
    outline-offset:2px;
    box-shadow:0 0 0 4px rgba(255,255,255,.1);
  }
  @media (hover:none) {
    html[data-theme="dark"] :where(button,.btn,.pill,.sub-chip,.tt-cat,.tt-opt,.slot):active { transform:scale(.985); }
  }
  @media (prefers-reduced-motion:reduce) {
    html[data-theme="dark"] :where(button,.btn,.pill,.sub-chip,.tt-cat,.tt-opt,.slot,.rcard) { transition-duration:.01ms !important; }
  }

  @media (max-width:980px) {
    html[data-theme="dark"] .m-feature-current { border-color:#292929; background:#0d0d0d; color:#fff; }
    html[data-theme="dark"] .m-feature-current .mfc-icon { background:#1b1b1b; color:#eee; }
    html[data-theme="dark"] .m-feature-current .mfc-cat { color:#777; }
    html[data-theme="dark"] .m-feature-switch { border-color:#fff; background:#fff; color:#111; }
    html[data-theme="dark"] .m-feature-sheet { border-color:#292929; background:#0d0d0d; box-shadow:0 26px 70px rgba(0,0,0,.7); }
    html[data-theme="dark"] .m-feature-sheet-head button,
    html[data-theme="dark"] .m-feature-search,
    html[data-theme="dark"] .m-feature-option { border-color:#303030; background:#111; color:#aaa; }
    html[data-theme="dark"] .m-feature-option:hover { background:#1b1b1b; color:#fff; }
    html[data-theme="dark"] .m-feature-option.active { border-color:#fff; background:#fff; color:#111; }
    html[data-theme="dark"] .m-feature-search::placeholder { color:#666; }
    html[data-theme="dark"] .m-feature-group-title { color:#777; }
  }

  @media (max-width:768px) {
    html[data-theme="dark"] .m-params-fab {
      border-color:#fff;
      background:#fff;
      color:#111;
      box-shadow:0 10px 28px rgba(0,0,0,.46);
    }
    html[data-theme="dark"] .m-params-fab:active { background:#dedede; transform:scale(.985); }
    html[data-theme="dark"] .m-params-close { border-color:#fff; background:#fff; color:#111; }
    html[data-theme="dark"] .canvas-head .ch-hint { border-color:#292929; background:#0d0d0d; color:#777; }
    html[data-theme="dark"] .params { border-top-color:#252525; background:#080808; box-shadow:0 -22px 60px rgba(0,0,0,.72); }
    html[data-theme="dark"] body.mparams-open .params { color:#f5f5f5; }
    html[data-theme="dark"] .params .feat-head p,
    html[data-theme="dark"] .params .field-label,
    html[data-theme="dark"] .params .cost-detail,
    html[data-theme="dark"] .params .extras-hint,
    html[data-theme="dark"] .params .dh-hint { color:#aaa; }
    html[data-theme="dark"] .params > .field { border-color:#242424; background:#0d0d0d; }
    html[data-theme="dark"] .params .hzg-task-list > .field.hzg-task-card { border-color:transparent; background:transparent; }
    html[data-theme="dark"] .params .gen-bar { border-top-color:#252525; background:#080808; box-shadow:0 -14px 32px rgba(0,0,0,.65); }
    html[data-theme="dark"] .m-param-overview { border-bottom-color:#252525; background:rgba(8,8,8,.98); }
    html[data-theme="dark"] .m-param-progress,
    html[data-theme="dark"] .m-param-progress.ready { color:#aaa; }
    html[data-theme="dark"] .m-param-jumps button { border-color:#303030; background:#111; color:#aaa; }
    html[data-theme="dark"] .m-param-jumps button:hover,
    html[data-theme="dark"] .m-param-jumps button:focus-visible { border-color:#fff; background:#fff; color:#111; }
    html[data-theme="dark"] .params::before { background:#444; }
  }

  /* 黑夜模式低眩光修正：强操作仍有层级，但不再使用大面积纯白表面。 */
  html[data-theme="dark"] .avatar,
  html[data-theme="dark"] .logo .mark,
  html[data-theme="dark"] .theme-switch button.active,
  html[data-theme="dark"] .tt-cat.active,
  html[data-theme="dark"] .tt-opt.active,
  html[data-theme="dark"] .tt-canvas.active,
  html[data-theme="dark"] .desktop-entry-btn,
  html[data-theme="dark"] .btn-primary,
  html[data-theme="dark"] .gen-btn,
  html[data-theme="dark"] .detail-primary-action,
  html[data-theme="dark"] .welcome-hint .wh-action,
  html[data-theme="dark"] .pill.active,
  html[data-theme="dark"] .sub-chip.active,
  html[data-theme="dark"] .hzg-combo.active,
  html[data-theme="dark"] .detail-mode-tabs button.active,
  html[data-theme="dark"] .detail-models button.active,
  html[data-theme="dark"] .detail-quality button.active,
  html[data-theme="dark"] .detail-ai-tabs button.active,
  html[data-theme="dark"] .ch-scope .chs-btn.active {
    border-color:#424242;
    background:#262626;
    color:#f4f4f4;
    box-shadow:inset 0 1px 0 rgba(255,255,255,.055);
  }
  html[data-theme="dark"] .desktop-entry-btn:hover,
  html[data-theme="dark"] .btn-primary:hover,
  html[data-theme="dark"] .gen-btn:not(:disabled):hover,
  html[data-theme="dark"] .detail-primary-action:not(:disabled):hover {
    border-color:#565656;
    background:#323232;
    color:#fff;
    box-shadow:0 8px 20px rgba(0,0,0,.36),inset 0 1px 0 rgba(255,255,255,.07);
  }
  html[data-theme="dark"] .btn-primary:active,
  html[data-theme="dark"] .gen-btn:not(:disabled):active,
  html[data-theme="dark"] .detail-primary-action:not(:disabled):active,
  html[data-theme="dark"] .desktop-entry-btn:active {
    border-color:#383838;
    background:#1d1d1d;
    box-shadow:none;
  }
  html[data-theme="dark"] .btn-primary:disabled,
  html[data-theme="dark"] .gen-btn:disabled,
  html[data-theme="dark"] .detail-primary-action:disabled {
    border-color:#222;
    background:#191919;
    color:#5f5f5f;
    box-shadow:none;
  }
  html[data-theme="dark"] .theme-switch button.active { border:0; background:#292929; }
  html[data-theme="dark"] .avatar { border:1px solid #3b3b3b; }
  html[data-theme="dark"] .logo .mark { border:1px solid #3b3b3b; }
  html[data-theme="dark"] .flow-step .fs-no {
    border:1px solid #424242;
    background:#292929;
    color:#f4f4f4;
    box-shadow:inset 0 1px 0 rgba(255,255,255,.055);
  }

  @media (max-width:980px) {
    html[data-theme="dark"] .m-feature-switch,
    html[data-theme="dark"] .m-feature-option.active {
      border-color:#454545;
      background:#272727;
      color:#f4f4f4;
      box-shadow:inset 0 1px 0 rgba(255,255,255,.055);
    }
  }
  @media (max-width:768px) {
    html[data-theme="dark"] .m-params-fab,
    html[data-theme="dark"] .m-params-close,
    html[data-theme="dark"] .m-param-jumps button:hover,
    html[data-theme="dark"] .m-param-jumps button:focus-visible {
      border-color:#454545;
      background:#272727;
      color:#f4f4f4;
    }
    html[data-theme="dark"] .m-params-fab { box-shadow:0 10px 28px rgba(0,0,0,.5); }
    html[data-theme="dark"] .m-params-fab:active { background:#1d1d1d; }
  }

  /* AI 画布输入区：文字直接落在 composer 上，不再叠一层浏览器默认焦点框。
     把原本塞在超长 placeholder 里的操作说明收为低干扰辅助行，空态更干净，输入时也更聚焦。 */
  .zj-card { padding:14px 16px 11px; border-radius:20px; }
  .zj-card-main { gap:12px; align-items:stretch; }
  .zj-input-wrap { display:flex; flex:1; flex-direction:column; min-height:94px; padding:1px 4px 2px; }
  .zj-input { min-height:66px; padding:5px 4px 0; font-size:14.5px; line-height:1.65; }
  .zj-input-helper { display:flex; align-items:center; gap:12px; min-height:20px; margin-top:auto; padding:6px 5px 0;
    color:#7c7d84; font-size:11px; line-height:1.3; pointer-events:none; user-select:none; }
  .zj-input-helper .zj-enter-hint { margin-left:auto; }
  .zj-input-helper kbd { padding:1px 4px; border:1px solid currentColor; border-radius:4px; font:600 9px/1.25 inherit; opacity:.78; }
  .zj-input-helper i { font-style:normal; opacity:.55; }
  .jm-charcount { right:5px; bottom:25px; }
  body.ziyou-mode .zj-input:focus { border-color:transparent; box-shadow:none; }

  html[data-theme="light"] body.ziyou-mode .zj-card { border-color:rgba(65,50,96,.13); box-shadow:0 12px 34px rgba(45,33,70,.08); }
  html[data-theme="light"] body.ziyou-mode .zj-card:focus-within { border-color:rgba(109,40,217,.3); box-shadow:0 0 0 3px rgba(109,40,217,.06),0 14px 36px rgba(45,33,70,.1); }
  html[data-theme="light"] body.ziyou-mode .zj-input-helper { color:#8c8596; }
  html[data-theme="light"] body.ziyou-mode .zj-input-helper kbd { color:#736a7d; background:#f7f6f9; border-color:#e4e1e9; }
  html[data-theme="light"] body.ziyou-mode .zj-input:focus { border-color:transparent; box-shadow:none; }

  @media (max-width:768px) {
    .zj-input-wrap { min-height:84px; }
    .zj-input { min-height:56px; }
    .zj-input-helper { gap:8px; font-size:10px; }
    .zj-input-helper > span:nth-child(2) { display:none; }
  }

  /* 详情页需求编辑器：用单一的轻边框承载输入，避免通用 focus 样式叠出粗黑双框。 */
  .detail-prompt-editor { position:relative; border:1px solid rgba(255,255,255,.12); border-radius:14px; overflow:hidden;
    background:rgba(255,255,255,.025); transition:border-color .18s ease,box-shadow .18s ease,background .18s ease; }
  .detail-prompt-editor:focus-within { border-color:rgba(198,151,255,.55); background:rgba(169,112,238,.035); box-shadow:0 0 0 3px rgba(169,112,238,.09); }
  .detail-prompt { display:block; min-height:116px; margin:0; padding:15px 16px 39px; border:0; border-radius:0; background:transparent; box-shadow:none; }
  .detail-prompt.is-storyboard { min-height:240px; }
  html[data-theme] .detail-prompt:focus,html[data-theme] .detail-prompt:focus-visible { border-color:transparent; outline:none; box-shadow:none; }
  .detail-prompt-meta { position:absolute; right:0; bottom:0; left:0; display:flex; align-items:center; justify-content:space-between; gap:12px;
    min-height:30px; padding:0 14px; border-top:1px solid rgba(255,255,255,.07); color:var(--ink-dim); font-size:10.5px; pointer-events:none; user-select:none; }
  .detail-prompt-count { flex-shrink:0; font-variant-numeric:tabular-nums; opacity:.72; }
  html[data-theme="light"] .detail-prompt-editor { border-color:#e3e3e3; background:#fafafa; }
  html[data-theme="light"] .detail-prompt-editor:focus-within { border-color:#aaa; background:#fff; box-shadow:0 0 0 3px rgba(0,0,0,.06); }
  html[data-theme="light"] .detail-prompt { border-color:transparent; background:transparent; color:#111; }
  html[data-theme="light"] .detail-prompt-meta { border-top-color:#ededed; color:#898989; }
  html[data-theme="dark"] .detail-prompt-editor { border-color:#303030; background:#101010; }
  html[data-theme="dark"] .detail-prompt-editor:focus-within { border-color:#666; background:#121212; box-shadow:0 0 0 3px rgba(255,255,255,.07); }
  html[data-theme="dark"] .detail-prompt { border-color:transparent; background:transparent; color:#f5f5f5; }
  html[data-theme="dark"] .detail-prompt-meta { border-top-color:#252525; color:#777; }
  @media (max-width:560px) {
    .detail-prompt { min-height:108px; padding:13px 13px 38px; }
    .detail-prompt-meta { padding:0 11px; font-size:10px; }
    .detail-prompt-meta > span:first-child { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  }

  /* 风格创意的补充要求：和详情页共用轻量编辑器语言，避免默认 textarea 的粗边框抢走注意力。 */
  .style-prompt-editor { position:relative; border:1px solid rgba(255,255,255,.12); border-radius:14px; overflow:hidden;
    background:rgba(255,255,255,.025); transition:border-color .18s ease,box-shadow .18s ease,background .18s ease; }
  .style-prompt-editor:focus-within { border-color:rgba(198,151,255,.55); background:rgba(169,112,238,.035); box-shadow:0 0 0 3px rgba(169,112,238,.09); }
  .style-prompt-editor .prompt-box { display:block; min-height:108px; margin:0; padding:15px 16px 39px; border:0; border-radius:0; background:transparent; box-shadow:none; }
  html[data-theme] .style-prompt-editor .prompt-box:focus,html[data-theme] .style-prompt-editor .prompt-box:focus-visible { border-color:transparent; outline:none; box-shadow:none; }
  .style-prompt-meta { position:absolute; right:0; bottom:0; left:0; display:flex; align-items:center; justify-content:space-between; gap:12px;
    min-height:30px; padding:0 14px; border-top:1px solid rgba(255,255,255,.07); color:var(--ink-dim); font-size:10.5px; pointer-events:none; user-select:none; }
  .style-prompt-count { flex-shrink:0; font-variant-numeric:tabular-nums; opacity:.72; }
  html[data-theme="light"] .style-prompt-editor { border-color:#e3e3e3; background:#fafafa; }
  html[data-theme="light"] .style-prompt-editor:focus-within { border-color:#aaa; background:#fff; box-shadow:0 0 0 3px rgba(0,0,0,.06); }
  html[data-theme="light"] .style-prompt-editor .prompt-box { border-color:transparent; background:transparent; color:#111; }
  html[data-theme="light"] .style-prompt-meta { border-top-color:#ededed; color:#898989; }
  html[data-theme="dark"] .style-prompt-editor { border-color:#303030; background:#101010; }
  html[data-theme="dark"] .style-prompt-editor:focus-within { border-color:#666; background:#121212; box-shadow:0 0 0 3px rgba(255,255,255,.07); }
  html[data-theme="dark"] .style-prompt-editor .prompt-box { border-color:transparent; background:transparent; color:#f5f5f5; }
  html[data-theme="dark"] .style-prompt-meta { border-top-color:#252525; color:#777; }
  @media (max-width:560px) {
    .style-prompt-editor .prompt-box { min-height:100px; padding:13px 13px 38px; }
    .style-prompt-meta { padding:0 11px; font-size:10px; }
    .style-prompt-meta > span:first-child { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  }

  /* 数字人和自由创作的文本需求：统一为单层编辑器，文字规则留在低干扰的底部提示区。 */
  .brief-prompt-editor { position:relative; margin-top:10px; border:1px solid rgba(255,255,255,.12); border-radius:14px; overflow:hidden;
    background:rgba(255,255,255,.025); transition:border-color .18s ease,box-shadow .18s ease,background .18s ease; }
  .brief-prompt-editor:focus-within { border-color:rgba(198,151,255,.55); background:rgba(169,112,238,.035); box-shadow:0 0 0 3px rgba(169,112,238,.09); }
  .brief-prompt-editor .prompt-box { display:block; min-height:108px; margin:0; padding:15px 16px 39px; border:0; border-radius:0; background:transparent; box-shadow:none; }
  html[data-theme] .brief-prompt-editor .prompt-box:focus,html[data-theme] .brief-prompt-editor .prompt-box:focus-visible { border-color:transparent; outline:none; box-shadow:none; }
  .brief-prompt-meta { position:absolute; right:0; bottom:0; left:0; display:flex; align-items:center; justify-content:space-between; gap:12px;
    min-height:30px; padding:0 14px; border-top:1px solid rgba(255,255,255,.07); color:var(--ink-dim); font-size:10.5px; pointer-events:none; user-select:none; }
  .brief-prompt-meta > span:last-child { flex-shrink:0; font-variant-numeric:tabular-nums; opacity:.72; }
  html[data-theme="light"] .brief-prompt-editor { border-color:#e3e3e3; background:#fafafa; }
  html[data-theme="light"] .brief-prompt-editor:focus-within { border-color:#aaa; background:#fff; box-shadow:0 0 0 3px rgba(0,0,0,.06); }
  html[data-theme="light"] .brief-prompt-editor .prompt-box { border-color:transparent; background:transparent; color:#111; }
  html[data-theme="light"] .brief-prompt-meta { border-top-color:#ededed; color:#898989; }
  html[data-theme="dark"] .brief-prompt-editor { border-color:#303030; background:#101010; }
  html[data-theme="dark"] .brief-prompt-editor:focus-within { border-color:#666; background:#121212; box-shadow:0 0 0 3px rgba(255,255,255,.07); }
  html[data-theme="dark"] .brief-prompt-editor .prompt-box { border-color:transparent; background:transparent; color:#f5f5f5; }
  html[data-theme="dark"] .brief-prompt-meta { border-top-color:#252525; color:#777; }
  /* 静物图任务组是一行要求：同样去除内层 border，只保留干净的外层容器。 */
  .compact-prompt-editor { position:relative; border:1px solid rgba(255,255,255,.12); border-radius:11px; overflow:hidden;
    background:rgba(255,255,255,.025); transition:border-color .18s ease,box-shadow .18s ease,background .18s ease; }
  .compact-prompt-editor:focus-within { border-color:rgba(198,151,255,.55); background:rgba(169,112,238,.035); box-shadow:0 0 0 3px rgba(169,112,238,.09); }
  .compact-prompt-editor .jw-style-prompt-input,
  .compact-prompt-editor .scene-prompt-input,
  .compact-prompt-editor.dh-prompt-editor .prompt-box { border:0; border-radius:0; background:transparent; }
  .clothing-product-prompt .scene-prompt-input { display:block; width:100%; min-height:44px; margin:0; padding:11px 52px 11px 14px; box-sizing:border-box; color:inherit; font:inherit; font-size:13px; line-height:1.45; }
  .clothing-product-prompt .scene-prompt-count { position:absolute; right:12px; top:50%; transform:translateY(-50%); color:var(--ink-dim); font-size:11px; font-variant-numeric:tabular-nums; pointer-events:none; }
  html[data-theme] .compact-prompt-editor .jw-style-prompt-input:focus,html[data-theme] .compact-prompt-editor .jw-style-prompt-input:focus-visible,
  html[data-theme] .compact-prompt-editor .scene-prompt-input:focus,html[data-theme] .compact-prompt-editor .scene-prompt-input:focus-visible,
  html[data-theme] .compact-prompt-editor.dh-prompt-editor .prompt-box:focus,html[data-theme] .compact-prompt-editor.dh-prompt-editor .prompt-box:focus-visible { border-color:transparent; outline:none; box-shadow:none; }
  .compact-prompt-editor.dh-prompt-editor .prompt-box { display:block; width:100%; min-height:52px; max-height:88px; margin:0; padding:11px 52px 11px 14px; resize:none; }
  html[data-theme="light"] .compact-prompt-editor { border-color:#e3e3e3; background:#fafafa; }
  html[data-theme="light"] .compact-prompt-editor:focus-within { border-color:#aaa; background:#fff; box-shadow:0 0 0 3px rgba(0,0,0,.06); }
  html[data-theme="dark"] .compact-prompt-editor { border-color:#303030; background:#101010; }
  html[data-theme="dark"] .compact-prompt-editor:focus-within { border-color:#666; background:#121212; box-shadow:0 0 0 3px rgba(255,255,255,.07); }
  @media (max-width:560px) {
    .brief-prompt-editor .prompt-box { min-height:100px; padding:13px 13px 38px; }
    .brief-prompt-meta { padding:0 11px; font-size:10px; }
    .brief-prompt-meta > span:first-child { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  }

  /* ============ 管理后台语义色 ============
     供应商 / 价格 / 用户 / 官方素材四个管理页的状态色原来写死在 app-admin.js 的内联
     style 里（共 116 处），绕过了整套主题系统：#7dffc4 薄荷绿、#fca5a5 浅红、#fbbf24
     琥珀黄印在白天主题的白底上几乎读不出来，审计流水的操作类型色尤其严重。这里统一成
     token，JS 只写 var(--adm-*)。
     必须定义在 :root 而不是各管理视图内 —— 用户详情抽屉和审计流水弹窗是 .modal-bg，
     挂在 body 下，不在管理视图的子树里，写进视图作用域会取不到值。
     放在文件最末尾是因为前面有多套历史 :root / html[data-theme="light"] 层叠，
     当前生效的白天主题是最后那套黑白极简方案，只有定义在它之后才不会被覆盖。
     白天取值与桌面经营面板的 --dco-* 对齐（深绿 / 深橙 / 深红），两套将来可以收敛成一套。 */
  :root {
    --adm-ok:#7dffc4; --adm-warn:#fbbf24; --adm-bad:#fca5a5;
    --adm-info:#22d3ee; --adm-accent:#a78bfa; --adm-danger:#f87171; --adm-muted:#94a3b8;
    --adm-chart-line:#38bdf8; --adm-chart-late:#60a5fa; --adm-chart-evening:#fb923c;
    --adm-row-mounted:rgba(255,255,255,.03); --adm-row-hint:rgba(56,189,248,.06);
  }
  html[data-theme="light"] {
    --adm-ok:#047857; --adm-warn:#b45309; --adm-bad:#b91c1c;
    --adm-info:#0e7490; --adm-accent:#5b21b6; --adm-danger:#dc2626; --adm-muted:#64748b;
    --adm-chart-line:#0369a1; --adm-chart-late:#1d4ed8; --adm-chart-evening:#c2410c;
    --adm-row-mounted:#f6f6f6; --adm-row-hint:rgba(3,105,161,.07);
  }

/* 算力中心：余额 / 充值 / 邀请独立分区，规则限定在此视图。 */
#rechargeView { padding:28px max(24px,calc((100% - 1280px)/2)) 40px; }
#rechargeView .rv-head p { max-width:760px; margin-bottom:24px; line-height:1.7; }
#rechargeView .rv-head h1 { font-size:28px; letter-spacing:-.6px; }
#rechargeView .rv-grid { grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr); grid-template-areas:"balance packages" "invite packages"; gap:18px; align-items:start; }
#rechargeView .card { min-width:0; border-radius:20px; padding:24px; background:var(--bg-soft); }
#rechargeView .bal-card { grid-area:balance; background:linear-gradient(135deg,rgba(139,92,246,.09),rgba(75,155,212,.05)),var(--bg-soft); }
#rechargeView .bal-card .bv { font-size:44px; font-variant-numeric:tabular-nums; }
#rechargeView .health { height:5px; margin-top:18px; }
#rechargeView .stat-row { gap:0; }
#rechargeView .stat { min-width:0; border:0; border-right:1px solid var(--glass-bd); border-radius:0; background:transparent; padding:4px 12px; }
#rechargeView .stat:last-child { border-right:0; }
#rechargeView .stat .sv { font-size:22px; font-variant-numeric:tabular-nums; overflow-wrap:anywhere; }
#rechargeView .stat .sl { font-size:11px; line-height:1.5; }
#rechargeView .wallet-invite { grid-area:invite; margin:0; }
#rechargeView .wallet-invite h2 { font-size:20px; }
#rechargeView .wallet-invite-steps { gap:12px; margin:18px 0; }
#rechargeView .wallet-invite-footer { gap:10px; }
#rechargeView .wallet-invite-footer>span { font-size:11px; }
#rechargeView #rechargePackagesCard { grid-area:packages; align-self:stretch; }
#rechargeView .wallet-section-title { margin:0 0 6px; font-size:18px; line-height:1.4; }
#rechargeView .wallet-section-desc { font-size:12px; color:var(--ink-soft); line-height:1.7; margin:0; }
#rechargeView .amount-grid { grid-template-columns:repeat(2,minmax(0,1fr)); gap:16px 12px; margin:24px 0 20px; }
#rechargeView .amount-grid .amt { padding:20px 10px 16px; border-radius:14px; background:var(--glass); }
#rechargeView .amount-grid .amt.active { background:var(--glass-2); border-color:var(--ink); box-shadow:inset 0 0 0 1px var(--ink); }
#rechargeView .amount-grid .amt:hover { border-color:var(--ink-soft); }
#rechargeView .amount-grid .av { font-size:26px; }
#rechargeView .amount-grid .ag { color:var(--ink); font-size:12px; line-height:1.6; }
#rechargeView .amount-grid .ad { color:var(--ink-soft); font-size:11px; line-height:1.6; }
#rechargeView .amount-grid .gift { background:var(--ink); color:var(--bg); }
#rechargeView .wallet-pay-summary { display:flex; align-items:center; justify-content:space-between; gap:12px; padding-top:18px; margin-bottom:16px; border-top:1px solid var(--glass-bd); font-size:13px; }
#rechargeView .wallet-support { margin-bottom:18px; padding:20px 24px; background:var(--glass); }
#rechargeView .wallet-support h2 { font-size:16px; }
#rechargeView .ledger { margin-top:18px; }
#rechargeView .ledger-tabs { margin:18px 0; flex-wrap:wrap; }
#rechargeView .ltab { font-family:inherit; min-height:40px; }
#rechargeView #ledgerBody { overflow-x:auto; }
#rechargeView th,#rechargeView td { white-space:nowrap; border-bottom:1px solid var(--glass-bd); }
#rechargeView .payment-success-notice[hidden] { display:none; }
#rechargeView .payment-success-notice { margin:0 0 18px; box-shadow:none; }
#rechargeView .payment-success-copy strong,#rechargeView .payment-success-copy span,#rechargeView .payment-success-invite,#rechargeView .payment-success-dismiss { color:var(--ink); }
#rechargeView .payment-success-record { color:var(--ink); background:var(--glass); border-color:var(--glass-bd); }
body:has(#rechargeView.show) .m-params-fab { display:none!important; }
@media(max-width:900px){
  #rechargeView .rv-grid { grid-template-columns:minmax(0,1fr)!important; grid-template-areas:"balance" "packages" "invite"; }
}
@media(max-width:600px){
  #rechargeView { padding:20px 14px max(24px,env(safe-area-inset-bottom)); }
  #rechargeView .rv-head h1 { font-size:24px; }
  #rechargeView .rv-head p { font-size:12px; margin-bottom:20px; }
  #rechargeView .card { padding:18px; border-radius:16px; }
  #rechargeView .stat { padding:4px 6px; }
  #rechargeView .stat .sv { font-size:20px; }
  #rechargeView .bal-card .bv { font-size:38px; }
  #rechargeView .amount-grid { gap:16px 10px; }
  #rechargeView .amount-grid .amt { padding:20px 8px 14px; }
  #rechargeView .amount-grid .av { font-size:23px; }
  #rechargeView .amount-grid .ag,#rechargeView .amount-grid .ah,#rechargeView .amount-grid .ad { font-size:11px; }
  #rechargeView .amount-grid .hot-tag,#rechargeView .amount-grid .gift { font-size:9px; padding:2px 5px; }
  #rechargeView .amount-grid .hot-tag { left:5px; }
  #rechargeView .amount-grid .gift { right:5px; }
  #rechargeView .wallet-support { gap:14px; }
  #rechargeView .ledger-tabs { gap:6px; }
  #rechargeView .ltab { padding:8px 12px; font-size:12px; }
  #rechargeView .payment-success-notice { flex-wrap:wrap; gap:10px; padding:14px; }
  #rechargeView .payment-success-copy { flex-basis:calc(100% - 50px); }
  #rechargeView .payment-success-record { margin-left:44px; }
  #rechargeView .payment-success-dismiss { margin-left:auto; }
}


/* 线条小图标（账户菜单/头像，移植自桌面端 2026-10-05 界面统一） */
.ui-mini-icon { width:16px; height:16px; display:block; }
.avatar .ui-mini-icon { width:17px; height:17px; }
