  /* ---------- 参数：模型/任务类型 弹出选择（参考即梦） ---------- */
  .prow{display:flex;align-items:center;gap:10px;margin-bottom:9px}
  .prow>label{width:66px;color:var(--dim);font-size:12px;flex:none}
  .picker{flex:1;min-width:0;display:flex;align-items:center;gap:8px;text-align:left;
    background:var(--field);border:1px solid var(--line);border-radius:var(--radius-control);padding:7px 10px;
    font:12.5px var(--mono);color:var(--text);cursor:pointer;
    transition:border-color .15s,background-color .15s,box-shadow .15s}
  /* 点击不做任何几何变化。这里原来是 transform:scale(.985)，1.5% 的缩放会让 1px 边框和
     文字每帧重新光栅化，点一下标签就“抖”几下；现在从按下到弹窗出现，按钮一动不动。 */
  .picker:hover{border-color:var(--accent-line);background:var(--hover)}
  /* 打开菜单时「周身亮起」：和分辨率 / 比例 / 并发方式那排控件同一套语言
     （实线强调色边框 + 3px 淡色光晕）。光晕是外阴影，不占位，不会挤动旁边的控件。 */
  .picker.on{border-color:var(--accent);background:var(--field);
    box-shadow:0 0 0 3px var(--accent-bg2)}
  .picker .pv{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .picker .pcar{color:var(--dim);font-size:10px}
  .picker .tico{width:22px;height:22px;flex:none;display:flex;align-items:center;justify-content:center;
    border-radius:var(--radius-tag);background:var(--panel2);border:1px solid var(--line2);color:var(--accent);font-size:12px}
  .pmenu{position:fixed;z-index:95;min-width:300px;max-width:420px;background:var(--pop);
    border:1px solid var(--line2);border-radius:var(--radius-control);padding:6px;
    /* 阴影跟设置区那套下拉（.ddmenu）共用一组令牌：两层柔和投影 + 顶部 1px 内高光。
       原来是 0 20px 52px #000d（80% 黑、52px 扩散），落在浅色页面上像压了一块黑板。 */
    box-shadow:var(--dd-shadow,0 18px 40px rgba(16,18,24,.16),0 2px 8px rgba(16,18,24,.08)),
               inset 0 1px 0 var(--dd-edge,rgba(255,255,255,.5));
    max-height:min(60vh,420px);overflow:auto;animation:popin .18s cubic-bezier(.16,1,.3,1)}
  /* ---- 弹出层动效（fluid-menu.js 2.1）：只动 opacity + translate3d ----
     卡片的尺寸 / 位置 / 圆角 / 边框 / 阴影全程固定，动画期间一个都不改，
     所以 1px 描边不会在展开时抖。
     凡是走 JS 的浮层都带上 .fm（打开）/ .fm-closing（收起）：.fm 会把各元素自带的
     popin / ddin 关键帧统一关掉，避免「CSS 淡入 + JS 淡入」叠成两段。 */
  .fm{animation:none !important}
  .fm-closing{pointer-events:none}
  /* 居中弹窗：容器只负责背景淡入淡出，卡片才做位移，避免整块背景被推移露边 */
  #setm.fm-closing,#fbm.fm-closing,#modal.fm-closing{pointer-events:none}
  .pmenu .mhd{font:10.5px var(--mono);color:var(--dim);padding:4px 8px 6px;letter-spacing:.6px}
  .mitem{display:flex;gap:9px;align-items:flex-start;padding:7px 9px;border-radius:var(--radius-control);cursor:pointer}
  .mitem:hover{background:var(--dd-hover)}
  /* 已选中：只留统一灰底 + 对勾，不再加内/外描边 */
  .mitem.on{background:var(--dd-sel)}
  .mitem .mi{width:20px;height:20px;flex:none;border-radius:var(--radius-tag);background:var(--field2);
    border:1px solid var(--line);display:flex;align-items:center;justify-content:center;
    color:var(--dim);font-size:11px;margin-top:1px}
  .mitem .mt{flex:1;min-width:0}
  /* 标题行改成 flex：胶囊的中线永远跟标题文字的 Y 中线对齐。
     原来胶囊是 inline-block + vertical-align:1px（按基线算），字号比标题小 2.5px，
     视觉上就会偏高半个字，看着像没对齐。 */
  .mitem .mt b{display:flex;align-items:center;gap:7px;min-width:0;
    font-size:13px;color:var(--text);font-weight:400}
  .mitem .mt b .mtn{display:block;min-width:0;margin:0;font:inherit;color:inherit;
    line-height:1.5;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .mitem .mt b .mtag{flex:none;display:inline-flex;align-items:center;margin:0;
    padding:0 6px;border-radius:var(--radius-card);border:1px solid var(--line);background:var(--panel2);
    color:var(--dim);font:10px/15px var(--mono);font-weight:400;max-width:180px;
    overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .mitem.on .mt b .mtag{background:var(--panel2);border-color:var(--line2);color:var(--dim)}
  .mitem.on .mt b{color:var(--text)}
  .mitem .mt span{display:block;font-size:11.5px;color:var(--dim);line-height:1.55;margin-top:1px}
  /* 对勾也走中性灰，和右侧极简下拉一致 */
  .mitem .mk{color:var(--text2);font-size:12px;flex:none;margin-top:2px}
  .ttap{font:10px var(--mono);color:var(--dim)}
  .ttnote{font-size:11px;color:var(--dim);margin:2px 0 10px 76px;min-height:15px}
  /* 任务类型那一行说明 + 顶部的接口对照 tag 都收起来：参数区只留控件，保持简洁
     （元素留在 DOM 里，脚本仍照常写它，不为了省一行去改一堆逻辑） */
  #ttNote,#ttApiTag{display:none!important}
  .ttnote b{color:var(--text2);font-weight:600}
  .ttnote.bad b,.ttnote.bad{color:var(--warn)}
  .pgrid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px 14px;margin-bottom:9px}
  .pcell{display:flex;align-items:center;gap:8px;min-width:0}
  .pcell>label{color:var(--dim);font-size:12px;flex:0 0 48px}

  /* 时长：数字框（只收 4–上限的整数）+ 拖动条，两者双向同步 */
  .durrow{gap:8px;margin:-2px 0 10px}
  .durrow>label{width:48px;flex:0 0 48px}
  #duration{flex:0 0 76px;width:76px;text-align:center;font-variant-numeric:tabular-nums;
            padding:6px 4px}
  #duration.locked{flex:1 1 auto;width:auto;max-width:190px;text-align:left;padding:6px 9px}
  .durun{font-size:11.5px;color:var(--dim);flex:none;margin-right:2px}
  .durun[hidden]{display:none}
  #durRange{flex:1;min-width:90px;height:20px;margin:0;background:transparent;cursor:pointer;
    -webkit-appearance:none;appearance:none}
  #durRange:focus{outline:none}
  #durRange::-webkit-slider-runnable-track{height:4px;border-radius:2px;
    background:linear-gradient(to right,var(--accent) 0 var(--p,0%),var(--line2) var(--p,0%) 100%)}
  #durRange::-webkit-slider-thumb{-webkit-appearance:none;width:14px;height:14px;margin-top:-5px;
    border-radius:50%;background:var(--accent);border:2px solid var(--panel);
    box-shadow:0 0 0 1px var(--accent-line),0 1px 3px rgba(0,0,0,.35);transition:.12s}
  #durRange:hover::-webkit-slider-thumb{background:var(--accent2)}
  #durRange:focus-visible::-webkit-slider-thumb{box-shadow:0 0 0 3px var(--accent-bg2)}
  #durRange::-moz-range-track{height:4px;border-radius:2px;background:var(--line2)}
  #durRange::-moz-range-progress{height:4px;border-radius:2px;background:var(--accent)}
  #durRange::-moz-range-thumb{width:12px;height:12px;border-radius:50%;background:var(--accent);
    border:2px solid var(--panel);box-shadow:0 0 0 1px var(--accent-line)}
  #durRange:disabled{opacity:.35;cursor:not-allowed}
  /* 时长弹出卡片：行内只留当前值按钮，滑杆和数字都在这里（参考即梦的「选择视频生成时长」） */
  .durpop{position:fixed;z-index:135;width:min(320px,calc(100vw - 16px));
    padding:12px 14px 10px;border-radius:var(--radius-control);border:0;
    background:var(--dd-bg);color:var(--dd-text);
    backdrop-filter:blur(18px) saturate(150%);-webkit-backdrop-filter:blur(18px) saturate(150%);
    box-shadow:var(--dd-shadow)}
  .durpop[hidden]{display:none}
  .durpop .durh{font:10.5px var(--mono);color:var(--dd-dim);letter-spacing:.4px;margin:0 2px 10px}
  .durpop .durmain{display:flex;align-items:center;gap:10px}
  .durpop #durRange{flex:1;min-width:0}
  .durpop #duration{flex:0 0 62px;width:62px;height:30px;padding:0 6px;text-align:center;
    background:var(--dd-inner);border:1px solid var(--dd-line);border-radius:var(--radius-tag);
    color:var(--dd-text);font:12px var(--mono)}
  .durpop #duration.locked{flex:1 1 auto;width:auto;max-width:none;text-align:left}
  .durpop .durun{flex:none;font-size:11.5px;color:var(--dd-dim);margin:0}
  .durpop .durticks{display:flex;justify-content:space-between;gap:4px;margin:6px 2px 0;
    font:10px var(--mono);color:var(--dd-dim);opacity:.85}
  .durpop .durticks span{flex:none}
  #btnDur .fselv{min-width:32px}
  @media (max-width:900px){ .pgrid{grid-template-columns:repeat(2,minmax(0,1fr))} }
  .actions{display:flex;gap:8px;margin-top:4px}
  .actions button{flex:1}
  pre#preview{margin:6px 0 0;background:var(--field);border:1px solid var(--line);border-radius:var(--radius-control);
              padding:11px;font:11.5px/1.6 var(--mono);color:var(--accent);max-height:340px;overflow:auto}
  .pvwbar{display:flex;align-items:center;gap:8px;margin-top:11px;font:11px var(--mono);
          color:var(--dim);letter-spacing:.5px}
  .warnbox{font-size:12px;color:var(--warn);background:var(--warn-bg);border:1px solid var(--warn-line);
           border-radius:var(--radius-control);padding:9px;margin-top:9px}
  .warnbox div+div{margin-top:5px}

