/* USER3UI-R1+R3（BOT-USER-THREE-UI-FIX-20260925 → BOT-USER-THREE-UI-CSS-R3-20260925，Claude Code bot:0.0）
   票②卡片阴影统一 + 票③绘图参数区并入右侧工具列底部。R3 窄修：六类可见面 hover 可区分（rest→lift）+ 图片面硬编码 drop-shadow 显式消除。
   纪律：只用既有主题 token（--sh-rest/--sh-lift，定义 uiopt-r1.css:28-30，浅/深主题共用值=天然两主题一致），零新颜色；
   全部规则为后挂覆盖（本文件在 index 12 个样式腿之后加载，同特异度判给后者），不改冻结件一行字节；回滚=删本 <link> 一行。 */

/* ── ② 默认态阴影统一 ──
   基准=.canvas-card{box-shadow:var(--sh-rest)}（uiopt-r1.css:89）。
   W1-AP 系「导入对象」卡（refinement.css:1572 .canvas-card.imported-canvas-object 明定 border:0/background:transparent/box-shadow:none）
   的透明包围框无阴影、其可见内容面亦无阴影=与标准卡不同层级。阴影一律附着可见内容边界本身，不给透明包围框造大框；
   命中区/连线手柄/卡宽高零改变（纯 box-shadow 视觉属性）。hover/选中既有环（.selected 虚线 outline :1579、conn-handle :394、generator hover :23）不触碰=仍可区分。 */
.canvas-card.imported-canvas-object .asset-preview-frame,        /* PDF/PPT/DWG/表格等真实预览盒（refinement.css:2530，高=100%-22px 题注带外） */
.canvas-card.imported-canvas-object .asset-generated-preview,    /* 无预览占位面（kind-* 线框块；独立在场时即可见边界） */
.canvas-card.imported-canvas-object .asset-video-shell,          /* 视频壳（含 poster） */
.canvas-card.imported-canvas-object .import-file-stack,          /* 多文件清单卡（main.js:2029） */
.canvas-card.imported-canvas-object .imported-single-image .canvas-real-image /* 单图卡可见图面（题注带在图外，阴影不罩空槽） */
  { box-shadow: var(--sh-rest); }
.canvas-card.imported-canvas-object .group-layer                  /* 多图堆叠面：原硬编码 0 7px 18px rgba(37,43,38,.12)（:1589）改挂 token=同层级 */
  { box-shadow: var(--sh-rest); }

/* ── ②R3-1 图片面硬编码 filter 消除（ORACLE 具名 RED，BOT-USER-THREE-UI-CSS-R3-20260925）──
   refinement.css:4514（IMGFIX-L）`.canvas-card .canvas-real-image{filter:drop-shadow(0 8px 16px rgba(28,35,31,.26))}` 字面 RGB 冒充 token、
   --sh-rest/--sh-lift 覆写不跟手。本规则以更高特异度（0-4-1 后挂）清除图片可见面 filter，阴影统一由上/下面 box-shadow token 腿承载。
   仅 paint 属性变化：几何/命中/尺寸零改；组堆 .group-real-image 与编辑器 .editor-real-image 本不在 :4514 命中集，不受影响。 */
.canvas-card.imported-canvas-object .imported-single-image .canvas-real-image { filter: none; }

/* ── ②R3-2 六类可见面 hover 提升（ORACLE S2-HOVER 真实 RED：hover 前后计算样式指纹全同）──
   合同=hover 与 rest 可区分：可见内容面 rest=--sh-rest → hover=--sh-lift，与既有阶梯完全同族
   （uiopt-r1.css:74 .project-card:hover、uiopt-r5.css:23 .canvas-card.generator-card:hover、uiopt-r2.css:31 stack-face hover 均此式）。
   触发挂 .canvas-card.imported-canvas-object:hover 祖先（与 generator 卡卡级悬停同语义）；透明包围框自身仍 box-shadow:none（1572 边界不改、不加大框）；
   选中态虚线 outline（refinement.css:1579）与 .selected 环（uiopt-r1.css:110）零触碰=既有区分保留。零几何/命中/尺寸变化。 */
.canvas-card.imported-canvas-object:hover .asset-preview-frame,
.canvas-card.imported-canvas-object:hover .asset-generated-preview,
.canvas-card.imported-canvas-object:hover .asset-video-shell,
.canvas-card.imported-canvas-object:hover .import-file-stack,
.canvas-card.imported-canvas-object:hover .imported-single-image .canvas-real-image,
.canvas-card.imported-canvas-object:hover .group-layer
  { box-shadow: var(--sh-lift); }

/* ── ②R5 hover 补盲——PDF/PPT 真实可见承载面（ORACLE〔74〕S2-HOVER/S2-HOVER-TOKEN 两红，BOT-USER3UI-HOVER-R5-20260925）──
   ②R3-2 选择器族只命中父层 .asset-preview-frame；纸面 img.asset-real-preview 于 refinement.css:1626 直挂 --sh-rest、
   且 :2531-2533 令其 100%×100% 盖满框=真人所见面。hover 时 frame 的 lift 环从纸后外扩而主导阴影环不变→两红。
   本行镜像基座面族（与 :1626 同域）把 hover 提升延到 frame 内真实预览面；DWG/表格/占位的 kind-* generated-preview 不在本行命中集。
   零新 token、零几何/命中/尺寸变化；rest 侧一字不动（仍由 :1626 既有 token 腿承载）；透明包围框边界不改。 */
.canvas-card.imported-canvas-object:hover .asset-preview-frame .asset-real-preview { box-shadow: var(--sh-lift); }

/* ── ③ 参数区并入竖工具列底部（票③：截图③ 色/线型/笔宽/透明度 → ④ 空余底部） ──
   现状=refinement.css:5244 把 .ed-toolbar 内 attrzone absolute 挂 rail 左外（right:100%+双 auto margin 垂直居中）=浮层遮主图。
   改法=列内流式末位 + margin-top:auto 钉底；DOM 零搬移（flex order 视觉重排），事件委托/innerHTML 重渲（image-editor-demo.js:2238）零影响。
   上下文显示、32px 紧凑图标形态沿用 refinement.css:5180-5199 既有规则；popover=JS fixed 分支（edToptOpen :1933-1951，向左 inward+视口双钳）不依赖挂载位=自动适配。
   窄/短窗口=工具列本体恢复 overflow-y:auto 滚动可达（fixed pop 不被滚动容器裁切；rail 无 transform 祖先）。≤1000px 旧侧挂媒体腿（:5239）被本后挂同特异度规则作废。 */
.editor-layer.ws[data-ed-demo] .ws .ed-toolbar { overflow-y: auto; overflow-x: hidden; scrollbar-width: none; }
.editor-layer.ws[data-ed-demo] .ws .ed-toolbar::-webkit-scrollbar { width: 0; height: 0; }
.editor-layer.ws[data-ed-demo] .ws .ed-toolbar > .ed-robadge { order: 0; }
.editor-layer.ws[data-ed-demo] .ws .ed-toolbar > .ed-drawing-tools { order: 1; }
.editor-layer.ws[data-ed-demo] .ws .ed-toolbar > .ed-workflow-tools { order: 3; flex: 0 0 auto; margin-top: auto; }
.editor-layer.ws[data-ed-demo] .ws .ed-toolbar > .ed-draw-properties {
  order: 2;
  position: static; top: auto; right: auto; bottom: auto; height: auto; transform: none;
  margin: 0; /* R398：工具参数紧随绘图工具，工作流位于列底。 */
  width: 100%; padding: 5px 0 4px;
  background: transparent; border: 0; border-radius: 0;
}

/* 2026-09-27：最大化是工具列最上面的固定按钮，不随工具滚动。 */
.editor-layer.ws[data-ed-demo] .ws .ed-toolbar { top: 42px; bottom: 84px; }
.editor-layer.ws[data-ed-demo] .ws .ws-controls.ws-controls-demo { height: 84px; }
.editor-layer.ws[data-ed-demo] .ws .ws-controls.ws-controls-demo.ws-controls-top {
  top: 0; bottom: auto; height: 42px; border-top: 0; z-index: 9;
}

/* 2026-10-09 真实点击遮挡修复：工具列与 composer 动作/发送带共用同一最右列。停靠生效（ed-composer-docked）
   时，把工具列底界抬到 composer 顶（--ed-rail-reserve = 视口高−composer顶，由 JS 按真实几何发值，不硬编码），
   工具列本体保持 overflow-y:auto（:51）滚动可达，末项也可滚到；三浮钮与发送由停靠列占其正上方/正下方独立空间。
   停靠停止时该变量随 restore 撤销 → 回原 84px（窄/短窗口原滚动腿不变）。 */
.editor-layer.ws[data-ed-demo].ed-composer-docked .ws .ed-toolbar { bottom: var(--ed-rail-reserve, 84px); }

/* Embedded recipe content must fit its host, not inherit modal width. */
.editor-layer.ws[data-ed-demo] .ed-template-dialog.ed-it-inline {
  width:100%; min-width:0; max-width:100%; max-height:none; padding:0;
  border:0; box-shadow:none; background:transparent; overflow:visible;
}
.editor-layer.ws[data-ed-demo] .ed-lit-mount,
.editor-layer.ws[data-ed-demo] .ed-lit-panel { min-width:0; max-width:100%; }
.editor-layer.ws[data-ed-demo] .ed-template-dialog.ed-it-inline form { min-width:0; }
.editor-layer.ws[data-ed-demo] .ed-template-dialog.ed-it-inline p,
.editor-layer.ws[data-ed-demo] .ed-template-dialog.ed-it-inline figcaption { overflow-wrap:anywhere; }
.editor-layer.ws[data-ed-demo] .ed-template-dialog.ed-it-inline .ed-template-fields { grid-template-columns:repeat(2,minmax(0,1fr)); }
.editor-layer.ws[data-ed-demo] .ed-template-dialog.ed-it-inline .ed-image-results { grid-template-columns:repeat(2,minmax(0,1fr)); }
.editor-layer.ws[data-ed-demo] .ed-template-dialog.ed-it-inline footer { flex-wrap:wrap; }
.editor-layer.ws[data-ed-demo] .ed-template-dialog.ed-it-inline select { max-width:100%; }

.editor-layer.ws[data-ed-demo] .ed-template-dialog.ed-it-inline input[type=checkbox] { width:auto; max-width:100%; justify-self:start; }

/* Editor pixels have one renderer. Keep the image node for source/geometry only:
   a cold native <img> otherwise flashes intrinsic-size pixels before canvas fit. */
.editor-layer.ws[data-ed-demo] .ws .ws-canvas img.ws-img { visibility:hidden; }

/* R398：真实 loading 状态驱动的不定进度，不虚构百分比。 */
.editor-layer.ws[data-ed-demo] .ws .ed-asset-state[data-ed-asset-state="loading"] { background: var(--surface); color: var(--ink-1); box-shadow: var(--sh-rest); min-width: 140px; }
.ed-asset-progress { display: block; height: 3px; margin-top: 5px; background: var(--chip-bg); border-radius: 3px; overflow: hidden; }
.ed-asset-progress i { display: block; width: 35%; height: 100%; background: var(--accent-ui); animation: ed-asset-loading 1.3s ease-in-out infinite alternate; }
@keyframes ed-asset-loading { from { transform: translateX(-100%); } to { transform: translateX(285%); } }
@media (prefers-reduced-motion: reduce) { .ed-asset-progress i { animation: none; width: 100%; opacity: .65; } }

/* ── B-UI-BOTTOM-THREE-STATES（2026-10-11，用户三态图 USER-BOTTOM-THREE-STATES.png + B-UI-BOTTOM-THREE-STATES-R3-SPEC.txt）──
   三主题 = 底部中央「思想｜规范｜Argus」（原「文字｜图片｜连线」位），三态一体：
     S1 收起 = 单条圆角胶囊三入口（.canvas-toolbar，仅此态可见）；
     S2 输入 = 点入口向上展开紧凑卡：卡顶是**同一组**三入口（.panel-tabs-row，避免上下重复）+ 真实可写输入 + 发送；
     S3 对话 = 已有会话 / 进详情时卡向上增高（.panel-full 限高内滚）：顶仍三入口，主体是真实用户/助手文字对话并滚动，
              输入区固定卡底不被长对话挤掉。
   卡整体下缘贴原底中条位置（bottom:18px）、只向上生长 ⇒ 三态底边位置稳定；1440/907/470 与矮视口分档限高，长文换行。
   图示里的 My notes / Auto / mic / 附件 / All recipes / Create recipe 等**无合同控件一律不实现**；零新颜色（只用既有 token）。
   图片编辑器在场时入口与整卡一并隐藏（USER-CLARIFICATION-EDITOR-HIDE，见 ⑤）。
   仅本文件后挂覆盖（本 <link> 在 index 第 31 腿=最后加载 → 同特异度判给本段），冻结件零字节改动，回滚=删本段。 */

/* ① 三入口分段控件：同一组样式服务两个宿主——S1 的 .canvas-toolbar 与 S2/S3 的卡顶 .panel-tabs-row */
.canvas-toolbar-main, .panel-tabs-row { display: flex; align-items: stretch; }
.canvas-toolbar .canvas-tab-btn, .panel-tabs-row .canvas-tab-btn { border: 0; border-left: 1px solid var(--u6-line, #e2e1da); background: transparent; border-radius: 0; cursor: pointer; padding: 7px 18px; font-size: 12px; font-weight: 620; color: var(--u6-ink, #4b6355); display: inline-flex; align-items: center; justify-content: center; }
.canvas-toolbar .canvas-tab-btn:first-child, .panel-tabs-row .canvas-tab-btn:first-child { border-left: 0; border-top-left-radius: var(--r-pill, 999px); border-bottom-left-radius: var(--r-pill, 999px); }
.canvas-toolbar .canvas-tab-btn:last-child, .panel-tabs-row .canvas-tab-btn:last-child { border-top-right-radius: var(--r-pill, 999px); border-bottom-right-radius: var(--r-pill, 999px); } /* 端段随圆角，避免 hover 方块溢出 */
.canvas-toolbar .canvas-tab-btn:hover, .panel-tabs-row .canvas-tab-btn:hover { background: var(--ctl-hover, #eef0eb); color: var(--ink-1, #2f322e); }
.canvas-toolbar .canvas-tab-btn.active, .panel-tabs-row .canvas-tab-btn.active { background: var(--u6-dark, #3d5346); color: var(--u6-gold, #f2e3b6); }
.canvas-toolbar .canvas-tab-btn:focus-visible, .panel-tabs-row .canvas-tab-btn:focus-visible { outline: 2px solid var(--u6-line, #658271); outline-offset: -2px; }
html[data-theme-preset="hermes"] .canvas-toolbar .canvas-tab-btn.active, html[data-theme-preset="hermes"] .panel-tabs-row .canvas-tab-btn.active { background-color: var(--u6-dark, #3d5346); color: var(--u6-gold, #f2e3b6); } /* r6-theme:60 的 hermes 淡底与金字对比不足，显式收敛 */
/* 次要位：原条件收纳钮（data-action="ui-stack"，hidden 仍由 main.js targeted 更新）移到主组右侧并降级为小号弱化钮 ⇒ 三主项不被夹成四主项 */
.canvas-toolbar .canvas-toolbar-aux { border: 0; background: transparent; border-radius: var(--r-pill, 999px); cursor: pointer; margin-left: 6px; padding: 5px 10px; font-size: 10px; font-weight: 500; color: var(--u6-ink-soft, #8a8c85); }
.canvas-toolbar .canvas-toolbar-aux:hover { background: var(--ctl-hover, #eef0eb); color: var(--ink-1, #2f322e); }
.canvas-toolbar .canvas-toolbar-aux:focus-visible { outline: 2px solid var(--u6-line, #658271); outline-offset: -2px; }

/* ② S1 ↔ S2/S3 互斥：浮卡在场时整条胶囊隐藏（三入口已移到卡顶，不上下重复）。display:none 优先于 ④ 的召回 opacity:1 ⇒ 全屏下也一致。 */
.app-frame:has(.canvas-stage .work-floats[data-work-panel] .bottom-tab-panel) .canvas-stage .canvas-toolbar { display: none; }
/* 卡锚：下缘贴原底中条位置（bottom 18px = 原胶囊底），水平同轴居中，只向上增高 */
.canvas-stage .work-floats[data-work-panel] { position: absolute; right: auto; left: 50%; bottom: 18px; transform: translateX(-50%); align-items: center; }
.work-floats[data-work-panel] .work-float-panel { position: relative; right: auto; bottom: auto; width: min(320px, calc(100vw - 32px)); display: flex; flex-direction: column; }

/* ③ 卡内三段布局（顶=三入口行 / 中=滚动主体 / 底=固定输入区）；S2 用紧凑档、S3 用完整档（限高内滚） */
.work-float-panel .bottom-tab-panel { display: flex; flex-direction: column; }
.work-float-panel .bottom-tab-panel.panel-compact { max-height: min(220px, 50vh); } /* S2：卡顶三入口行 + 输入区必须完整可见（比纯速览档高一点），主体仍内滚 */
.work-float-panel .bottom-tab-panel.panel-full { max-height: min(430px, 62vh); }
.work-float-panel .panel-body { overflow: auto; }
.work-float-panel .panel-head.panel-head-chat { display: flex; align-items: center; justify-content: space-between; gap: 8px; flex: 0 0 auto; }
.work-float-panel .chat-log { flex: 1 1 auto; min-height: 0; }
.work-float-panel .chat-composer { flex: 0 0 auto; }

/* ④ 全屏纯画布：底中工具默认隐藏、底边召回（refinement.css:3905-3910 原合同）；浮卡已展开时其入口本就在卡顶，召回腿不必接管。 */
.app-frame.shell-fs:has(.canvas-shell):not(.shell-fs-bottom):has(.bottom-tab-panel) .canvas-toolbar { opacity: 1; pointer-events: auto; }

/* ⑤ 编辑器在场：底中三入口与浮卡一并隐藏（用户裁决 2026-10-11「图片编辑器出现就不要显示 思想|规范|Argus」，
   持久裁决 sol-ui-redline-20261011/USER-CLARIFICATION-EDITOR-HIDE.txt）。
   —— 不抬层级去盖编辑器（.editor-layer{position:fixed;inset:64px 0 0;z-index:130} 保持压倒一切）、不把卡搬到右侧、不恢复右竖头；
   —— 不用 JS 清状态：编辑器关闭（.editor-layer 消失）时本规则自动失效，入口与浮卡原样恢复（含原会话与草稿），且
      syncPanelEntryState() 已按 state.panelTab 同步过 active/aria-selected ⇒ 恢复瞬间选中态即正确；
   —— 谓词与 uiopt-r4.css:329 一致（.editor-layer.ws[data-ed-demo]）= Sol 浏览器判定「编辑器在场」的既有信号。 */
.app-frame:has(.editor-layer.ws[data-ed-demo]) .canvas-stage .canvas-toolbar,
.app-frame:has(.editor-layer.ws[data-ed-demo]) .canvas-stage .work-floats[data-work-panel] { display: none; }

/* ⑥ 对话主体：真实用户/助手文字（非图片 / 配方列表 / 知识图谱）；长文换行，空态诚实 */
.work-float-panel .chat-msg { display: flex; gap: 8px; margin: 8px 0; font-size: 12px; line-height: 1.55; }
.work-float-panel .chat-msg b { flex: 0 0 auto; font-size: 11px; font-weight: 620; color: var(--u6-ink-soft, #8a8c85); padding-top: 1px; }
.work-float-panel .chat-msg span { white-space: pre-wrap; overflow-wrap: anywhere; color: var(--ink-1, #2f322e); } /* 长文换行 */
.work-float-panel .chat-msg.ai span { color: var(--ink-2, #4b6355); }
.work-float-panel .chat-msg.pending span, .work-float-panel .chat-msg.failed span { color: var(--u6-ink-soft, #8a8c85); }
.work-float-panel .chat-empty { margin: 8px 0; font-size: 12px; line-height: 1.6; color: var(--ink-3, #8a8c85); }

/* ⑦ 卡底输入区：真实可写 textarea + 发送 + pending/error 状态行；固定在卡底（不被长对话挤掉） */
.work-float-panel .chat-composer { border-top: 1px solid var(--hairline, #e2e1da); margin-top: 4px; padding-top: 8px; }
.work-float-panel .chat-input { width: 100%; box-sizing: border-box; max-height: 96px; overflow: auto; resize: none; border: 0; background: transparent; font: inherit; font-size: 12px; line-height: 1.55; color: var(--ink-1, #2f322e); }
.work-float-panel .chat-input:focus { outline: none; }
.work-float-panel .chat-input::placeholder { color: var(--ink-3, #8a8c85); }
.work-float-panel .chat-composer-foot { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-top: 6px; }
.work-float-panel .chat-status { font-size: 11px; color: var(--ink-3, #8a8c85); }
.work-float-panel .chat-status.run { color: var(--accent-ui, #658271); }
.work-float-panel .chat-status.warn { color: var(--u6-gold, #a66a28); }
.work-float-panel .chat-send { border: 0; border-radius: var(--r-pill, 999px); background: var(--u6-dark, #3d5346); color: var(--u6-gold, #f2e3b6); font-size: 12px; font-weight: 620; padding: 6px 16px; cursor: pointer; }
.work-float-panel .chat-send:disabled { opacity: .55; cursor: default; }
.work-float-panel .chat-send:focus-visible { outline: 2px solid var(--u6-line, #658271); outline-offset: 2px; }

/* ⑧ 可视内限高：桌面 / 1280 / 907 / 470 四档 + 矮视口；内部滚动，不盖编辑工具列、正文与发送钮 */
@media (max-width: 1280px) { .work-floats[data-work-panel] .work-float-panel { width: min(320px, calc(100vw - 32px)); } }
@media (max-width: 907px) { .work-floats[data-work-panel] .work-float-panel { width: min(300px, calc(100vw - 28px)); } .work-float-panel .bottom-tab-panel.panel-full { max-height: min(360px, 58vh); } }
@media (max-width: 470px) { .canvas-toolbar .canvas-tab-btn, .panel-tabs-row .canvas-tab-btn { padding: 7px 11px; font-size: 11px; } .work-floats[data-work-panel] .work-float-panel { width: calc(100vw - 24px); } .work-float-panel .bottom-tab-panel.panel-full { max-height: 56vh; } }
@media (max-height: 620px) { .work-float-panel .bottom-tab-panel.panel-compact { max-height: min(200px, 46vh); } .work-float-panel .bottom-tab-panel.panel-full { max-height: 56vh; } }

/* ── B-UI-CONNECTOR-REACHABILITY-R1（2026-10-11，Sol 真浏览器实证 sol-three-state-connector-review-20261011/out/GENERATOR-CONNECTOR.json：
   生成器 pill 四侧 display:none·box 0×0；expanded 的 top/left/bottom 侧 elementFromPoint 命中同卡兄弟 `.rz` 而非 `.conn-handle`）──
   只修「每卡唯一就近柄」`span.conn-handle`（工厂 main.js:2362，样式 refinement.css:392-398：18px 圆、骑卡边中点、z9）
   的可达性；DOM、择边逻辑（connHandleSync main.js:11921）、pointerdown 通道（main.js:11345）、pill 本体拖拽/展开/提交全零改。

   ① 抬层：柄 z 9 → 11，压过同卡兄弟 `.rz-wrap`（uiopt-r2.css:51 `z-index:10`）⇒ 圆脚下那 18×6px 归柄。
      这是把既有让渡（uiopt-r2.css:48「带内缘命中优先」，主审原裁）就地翻面，**不是** A 提案那种
      `.rz[data-resize-dir=n]{pointer-events:none}`——那条会废掉**整条边**的缩放，已按工单否决。
      四边带几何（6px 边带 / 10px 角带，uiopt-r2.css:53-60）、四角 nw/ne/sw/se、分向 cursor、旁侧可用长度全部零触；
      被让出的只有圆自身那 18×6px（边带其余部分与四角仍可起缩放）⇒「resize 在柄旁与四角仍在」成立。
      z 只在**卡自身层叠上下文内**抬（`.canvas-card{position:absolute;z-index:2}` 已自建上下文）⇒ 卡对外仍是 z2，
      **不动 canvas world、不压底中对话浮卡（`.work-floats` z12）、不压编辑器（`.editor-layer` z130）**。

   ② pill 显示：uiopt-r5.css:20 把 `.g5-pill .conn-handle` 一并 `display:none`（该行原是隐藏 pill 态 card-head/meta 的皮肤规则，
      柄被连坐）⇒ 生成器 pill 态零拉线入口（工作流/配方建的生成器出生即 pill，main.js:7859/7918）。
      按基态三段（`.on` / `:hover` / `:focus-within`，refinement.css:393-394）原样补齐、用更专指的 pill 作用域压过那条 `display:none`；
      「只显最近点」单柄模型与 `connHandleSync` 就近择边完全保留（不四柄同显）。

   ③ pill 裁剪：`overflow:hidden`（uiopt-r5.css:19）会裁掉骑边柄的**外半**，且边中点恰落在裁剪盒**半开边界之外**
      ⇒ `elementFromPoint` 恒落不到柄（同源先例：`.g5-card` 早在 uiopt-r5.css:178 加 `overflow:visible`，原注释即
      「expose the connection handle outside the rounded content shell」；genpill-r2.css:26-44 在 hover-open 态亦已放开）。
      仅在「柄可见」的三态放开裁剪；胶囊形由卡自身 `border-radius:999px` 背景保持，可见内容各自带圆角
      （`.g5-pill-fill` border-radius:999px、圆提交钮、圆 chip）且内层行自带 `overflow:hidden`（genpill-r2.css:7）
      ⇒ 圆角裁切合同与「零黑角」不丢；静置态（指针不在附近）仍照旧裁剪。
   ④ 已知未解（见 RESULT holds）：`#g5-pop` 悬停弹层由 main.js:9049 `shell.append` 挂在卡内、`z-index:9500`（uiopt-r5.css:80）
      ⇒ 开层时柄的外缘数像素仍在弹层下；但其上区底边停在卡上缘外 6px（genpill-r2.css:53-56）、下区随流到卡底缘，
      柄心（恰在卡边中点）不被覆盖。该态未经浏览器实证，本票不臆造弹层几何。 */
.canvas-card .conn-handle.conn-handle { z-index: 11; }
.canvas-card.g5-pill:has(.conn-handle.on) .conn-handle,
.canvas-card.g5-pill:hover .conn-handle,
.canvas-card.g5-pill:focus-within .conn-handle { display: flex; }
.canvas-card.g5-pill:has(.conn-handle.on),
.canvas-card.g5-pill:hover,
.canvas-card.g5-pill:focus-within { overflow: visible; }

/* ══ B-UI-GENERATOR-COMPOSER-R1（2026-10-11 · Claude Code）实际画布生成器 compact/card/expanded 合成器 ══
   依据：用户红字图 USER-GENERATOR-COMPOSER-SIX-PARAMS.png + 其 .txt 接纳口径（同一个大容器含真实 prompt 与 6 组参数、
   两排 3 组、右侧提交占独立列跨 2 排、不造配置/模型、不删原功能、hover+focus+click/触屏可达）。
   改动面：DOM 只动「提交钮从 .gen-prompt-box 移入 .gen-controls」并加一层统一容器 .gen-composer（main.js 2237-2253 区）；
   六组参数的真实 select/option/optgroup/disabled/目录与全部既有 change 处理器**零改**（悬停增强器只改原生 size，见 main.js 尾部）。

   ① 统一容器：整宽真实提示词 + 六组参数（4 列 × 2 行）+ 上排右侧独立提交
      —— .gen-composer 自带圆角/描边/底色与 5px 内衬 ⇒ 子元素够不到 .generator-body.gen-compact 的圆角外沿。
      .gen-compact-content 与 .g5-expanded 下同一份 composer（三态共用同一 body 模板）。 */
.gen-compact-content .gen-composer { display: grid; grid-template-columns: minmax(0, 1fr); gap: 4px; padding: 5px; border: 1px solid color-mix(in srgb, var(--u6-line, #d7d5ce) 70%, transparent); border-radius: 14px; background: var(--surface); overflow: visible; }
.gen-compact-content .gen-composer .gen-prompt-box { display: block; flex: 0 0 auto; min-height: 0; }
.gen-compact-content .gen-composer .gen-prompt-box textarea[data-gen-prompt] { width: 100%; min-height: 64px; height: auto; border: 0; background: transparent; border-radius: 10px; box-shadow: none; padding: 6px 8px; }
.gen-compact-content .gen-composer .gen-prompt-box textarea[data-gen-prompt]:focus { border: 0; box-shadow: none; outline: 1px solid var(--accent-ui); }

/* ② 参数区：4 列 × 2 行 + 第 4 列=提交（上排）；下排右侧为 count>1 的统一/逐输出切换。
      提交钮已不在 .gen-prompt-box 内 ⇒ refinement.css:5330/5331/5342 与 genpill-r2.css:171 三条抢同一按钮的限定规则自动失效；
      本组规则用更晚文件 + (0,3,0) 压过 .gen-run-icon 基座（refinement.css:5304 的 absolute/29px/opacity .18）。 */
.canvas-card .generator-body.gen-compact .gen-composer .gen-controls { grid-template-columns: repeat(4, minmax(0, 1fr)); grid-template-rows: 26px 26px; gap: 4px; padding: 0; }
/* ③ USER-FIVE-REDLINES ③（2026-10-11 用户五红字「按钮应该是没有底色」）：提交箭头去底色=底色 transparent + 箭头取 var(--u6-ink)。
   可识别性=原 genControlIcon('up') 的 SVG 走 stroke:currentColor（main.js:2133）⇒ 换 color 即换箭头色，字形/尺寸零改；
   真实发送处理（[data-gen-exec] 委托 → g5HandoffCheck → g5RealSubmit，main.js:8014）与 focus-visible 环原样保留；
   禁用态补一条可见样式（基座 refinement.css:5304 的 opacity .18 已被本组 opacity:1 覆盖 ⇒ 不补则禁用不可辨），产品从不置 disabled=零行为变化。 */
.canvas-card .generator-body.gen-compact .gen-composer .gen-controls > .gen-ctl:nth-of-type(-n+3) { grid-column: auto; grid-row: 1; }
.canvas-card .generator-body.gen-compact .gen-composer .gen-controls > .gen-ctl:nth-of-type(n+4) { grid-column: auto; grid-row: 2; }
.canvas-card .generator-body.gen-compact .gen-composer .gen-controls .gen-run-icon { grid-column: 4; grid-row: 1; position: static; top: auto; right: auto; bottom: auto; width: 100%; height: auto; align-self: stretch; margin: 0; padding: 0; display: grid; place-items: center; border: 0; border-radius: 12px; background: transparent; color: var(--u6-ink, #3a3b36); opacity: 1; pointer-events: auto; cursor: pointer; }
.gen-composer .gen-controls .gen-run-icon:hover { background: color-mix(in srgb, var(--accent-ui) 12%, transparent); }
.gen-composer .gen-controls .gen-run-icon:disabled { background: transparent; opacity: .35; cursor: not-allowed; }
.gen-composer .gen-controls .gen-run-icon:focus-visible { outline: 2px solid var(--accent-ui); outline-offset: 2px; }

/* ③④⑤⑥ 六组展开＝真实 DOM 列表框 .g5-lb（B-UI-GENERATOR-SIX-REDLINES-R3，2026-10-11 · Claude Code）。

   【本条替换掉的旧机制，以及为什么必须换】R1/R2 曾用「原生 select 的 size>1 就地渲染为列表盒」并在此处写几何；
   Sol 私有真 Chrome 对 A2 候选 served 字节实测（sol-generator-five-redlines-review-20261011/out/UI-SIX-DIAGNOSTIC.json）
   以像素证据证伪：sameRowStable=true 而 differentRowsPaintDifferent=false、before='1' after='1' ⇒ 该渲染路径上 Blink
   **不为非选中 option 绘制悬停高亮**（作者也无法用 option:hover 复现，R2 删掉 option background-color 已无可辨高亮）；
   且最长真实标签 textWidth 407.8px 对可用 152.32px ⇒ max-width:240px 仍是**截断**。
   原生列表盒的行高亮/宽度/换行都不在作者可控面内 ⇒ 改为**最小共享 DOM 列表框**：数据源仍是同一个 select
   （main.js 尾部 g5LbBuild 现读 options/optgroup 投影，值/disabled/title/真实目录一字未造），
   静置（未展开）态零改：三行 23px 两排皮肤、六个原生 select 的目录与可用性、pill/expanded 三态全不动。
   .gen-ctl.g5-opt-open 保留为纯 JS 状态标记（main.js Escape 落点），本票**不给它任何 z-index**
   ⇒ 不抬参数行、更不抬整卡，r31 局部层级（柄 z11 > 卡内本体）原样。
   旧二规则同时删除：`.gen-ctl.g5-opt-open{z-index:60}` 与 `.g5-opt-open select{top:23px;width:max-content…}`——
   前者会把参数行抬到柄(z11)之上，后者是在猜级联行高；几何改为 JS 按真实 rect 算（见 g5LbPlace）。

   【layering】.g5-lb 挂在该 .canvas-card 内部、z-index:10 **小于**柄的 z-index:11（user-three-ui.css:211；
   .g5-pill.g5-hover-open .conn-handle 更是 9501）⇒ 柄恒在列表盒之上、仍可命中，且**不抬整卡**
   （指针在柄上时列表盒自然 pointerover 离开 ⇒ 走既有 g5OptClose，与 r31 nearestreachable/全遮隐藏恢复无交互）。
   .g5-lb-open 放开裁切：生成器卡已无 > .card-ref-chip（uiopt-r5:197 不命中），.g5-card/.g5-expanded 本就 visible，此处再兜一层。
   盒顶＝参数行真实下缘（④「向下展开」），实底 --surface α=1（④「不透明」）；长标签换行不裁剪（⑤）；行是真实 DOM
   ⇒ 纯 CSS :hover 高亮随鼠标（⑥），悬停不写 value、不派发事件，提交只在 main.js g5LbCommit 一处。 */
.canvas-card.g5-lb-open { overflow: visible; }
.canvas-card > .g5-lb { position: absolute; z-index: 10; box-sizing: border-box; padding: 4px; overflow-x: hidden; overflow-y: auto; border: 1px solid var(--line, #d9d4c8); border-radius: 8px; background: var(--surface, #fffdf9); box-shadow: 0 10px 24px rgba(20, 24, 22, .18); color: var(--ink, #2b2b28); font-size: 11px; line-height: 1.35; text-align: left; }
.canvas-card > .g5-lb .g5-lb-group { display: block; }
.canvas-card > .g5-lb .g5-lb-glabel { padding: 3px 6px 2px; font-size: 10px; opacity: .72; }
.canvas-card > .g5-lb .g5-lb-row { display: block; padding: 4px 6px; border-radius: 5px; white-space: normal; overflow-wrap: anywhere; word-break: break-word; cursor: pointer; }
.canvas-card > .g5-lb .g5-lb-row + .g5-lb-row { margin-top: 1px; }
.canvas-card > .g5-lb .g5-lb-row:hover, .canvas-card > .g5-lb .g5-lb-row.is-active { background: color-mix(in srgb, var(--accent-ui, #3f6f5f) 22%, var(--surface, #fffdf9)); }
.canvas-card > .g5-lb .g5-lb-row.is-selected { font-weight: 600; }
.canvas-card > .g5-lb .g5-lb-row.is-disabled { cursor: not-allowed; opacity: .5; }
/* USER-SIX-R5 ③（2026-10-11 · Claude Code）：禁用行**仍不可执行**（唯一提交闸 g5LbCommit:13347 直接 return，
   value/change 都不碰，**零改**），但鼠标划过它时也必须有**可辨高亮**（用户红字：灰下去的行划过也该看得见）。
   这里原本有一条 `.is-disabled:hover{background:transparent}` 把高亮强行压成透明 ⇒ Sol r4 真 Chrome 按行裁剪截图实测
   该行 hover/quiet 两拍像素**逐字节相同**（ACCEPT-sol-r4.json · p6b.hover-highlight-follows-mouse：
   lastRowBytes {hover:1548, quiet:1548, identical:true}，而首行 identical:false）⇒ 悬停零反馈。
   修法（删除该条，仅此一行）：禁用行回落 :273 的同一条 .g5-lb-row:hover 高亮（accent 22% 混色）；
   文字与透明度(.5)按用户要求原样保留；行仍是 role=option + aria-disabled=true，可访问语义不变。 */
.canvas-card > .g5-lb .g5-lb-text { display: block; }
.canvas-card .generator-body.gen-compact:has(.gen-controls .gen-ctl.g5-opt-open) { overflow: visible; }
/* ①-a USER-FIVE-REDLINES（coordinator 04:07「不能隐藏唯一操作」）：生成器卡撤掉底条后，[data-ref-clear] 的落点=既有参考缩略图/附件条 .gen-ref-strip
   里的一个「参考」项（main.js:2238，仅在 card.refImport/refImportLabel 存在时出现）。样式只借既有 .gen-ref-item/.gen-ref-del 皮肤，本条只压一下序号色，
   不新增常驻状态条、不改卡面底部、不改任何按钮语义。 */
.gen-ref-strip .gen-ref-bound .gen-ref-no { color: var(--u6-ink, #3a3b36); }
.gen-ref-strip .gen-ref-bound .gen-ref-del { display: flex; } /* 唯一清除入口不得靠 hover 才现身（refinement.css:5313 对普通 ref 项是 hover 才显示）⇒ 本项常显 */
.gen-ref-strip .gen-ref-bound { width: auto; min-width: 34px; height: 42px; justify-content: center; cursor: pointer; }

/* ④ 「说明文字不显示」——**R2 收紧**（Sol 裁决：真值状态必须可见；仅冗余文件名可收；只留 title 不算可达）：
      只把**冗余文件名** .ref-name（与 ref-strip 缩略图/标题重复）在 ref-legacy / ref-ready 两态收出视觉排版，
      保留在 DOM 与无障碍树内，且 chip 自身 title 原样保留（main.js:8168「参考文件：<名> · <状态>」悬停仍可读）。
      **.ref-st 真值状态一律保持可见**：ref-legacy「仅挂名·未读取」（未读参考=本轮要恢复的诚实态）、
      ref-ready「已读入本地·未上传后端」、ref-reading「读取中…」、ref-failed「读取失败：<err>」四态全部原样显示，
      真实错误与参考状态**绝不隐藏**。pill 态本就被 uiopt-r5.css:20 连片隐藏，本组规则排除 pill，避免与既往裁决打架。 */
.canvas-card:not(.g5-pill) .card-ref-chip.ref-legacy .ref-name,
.canvas-card:not(.g5-pill) .card-ref-chip.ref-ready .ref-name { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; border: 0; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }

/* ══ B-CONNECTOR-REACHABILITY-R1（2026-10-11 · Claude Code）拉线柄可达性三修 A/B/C ══
   依据：Sol 两轮真 Chromium（out/RESULT.json 底中浮卡吃底侧柄 0/5；out/RESULT-REF.json 带 refImportLabel 的
   expanded 四边 4/5·1/5·1/5·4/5 失配落 canvas-world＝**裁切**、pill 悬停 bottom/left 1/5 失配落
   g5-pop-down/g5-pop-noref＝**弹层盖圆沿**）。改动面**只有** main.js（connHandleSync 一处）与本文件尾追加三组；
   r30 六参数 / 底中三态 / 编辑器隐藏 / resize 让渡几何（仅圆那 18×6px）**零触**；不 portal、不 toast、不 pointer-events 去废。 */

/* A · 附件裁切：uiopt-r5.css:197 `.canvas-card:has(> .card-ref-chip){display:flex;flex-direction:column;overflow:hidden}`
   与 :178 `.g5-card{overflow:visible}` / :22 `.g5-expanded{overflow:visible}` **同为 (0,2,0) 但声明在后 ⇒ 胜**，
   于是任何挂了参考 chip 的卡（pill/card/expanded/图片卡）一律 overflow:hidden ⇒ 骑边柄的**外半**被裁、
   边中点恰落裁剪盒**半开边界**。r29（本文件 :212-217）只救 `.g5-pill` ⇒ card/expanded 仍裁。
   按报告补齐**同义三态**（`.on` / `:hover` / `:focus-within`，即「柄可见」的三种情形）放开裁剪。
   特异度 (0,5,0)/(0,4,0) > (0,2,0)，且本文件最后加载 ⇒ 稳胜。
   作用域限定 `.canvas-stage` 之内：图片编辑器 `.editor-layer` 不在其中，且 image-editor-demo.js 既不产
   `.canvas-card` 也不产 `.card-ref-chip` ⇒ **编辑器叶零触**。圆角合同不丢：内层 `.generator-body.gen-compact`
   仍自带 overflow:hidden 与圆角（uiopt-r5.css:24）、`.gen-composer` 自带 14px 圆角（本文件 :228）
   ⇒「零黑角」须 Chromium 截图复核（登记为验收项 A2）。静置态（指针不在附近）照旧裁剪。 */
.canvas-stage .canvas-card:has(> .card-ref-chip):has(.conn-handle.on),
.canvas-stage .canvas-card:has(> .card-ref-chip):hover,
.canvas-stage .canvas-card:has(> .card-ref-chip):focus-within { overflow: visible; }

/* B · 同卡 g5-pop：悬停展开时 `#g5-pop` 由 main.js:9052 **append 进卡内**，与柄同处**卡自身层叠上下文**；
   弹层 `z-index:9500`（uiopt-r5.css:80）> 柄 z11（本文件 :211）⇒ 弹层盖住柄的外缘/圆沿。
   只在 `.g5-hover-open` 态把柄**局部**抬到 9501 ⇒ 18px 圆**整圆可点**。
   **不**用 `pointer-events:none` 去废弹层交互；**不**抬整卡（卡对外仍 z2，`.g5-hover-open` 既有 z30 不变）
   ⇒ 不压底中对话浮卡（`.work-floats` z12）、不压编辑器（`.editor-layer`）。 */
.canvas-card.g5-pill.g5-hover-open .conn-handle.conn-handle { z-index: 9501; }

/* C · 全遮挡诚实态：connHandleSync 四边皆不可达时撤 `.on`、加 `.conn-handle-blocked`。
   基态 refinement.css:392 已 display:none，但 `:hover`/`:focus`/`:focus-within` 兜底（:394）与
   r29 的 pill 兜底（本文件 :212-214）会在悬停时把柄**假显** ⇒ 此处以更高特异度屏蔽兜底，
   保证「完全遮挡不得伪称可达」。 */
.canvas-card .conn-handle.conn-handle.conn-handle-blocked,
.canvas-card:hover .conn-handle.conn-handle.conn-handle-blocked,
.canvas-card:focus .conn-handle.conn-handle.conn-handle-blocked,
.canvas-card:focus-within .conn-handle.conn-handle.conn-handle-blocked,
.canvas-card.g5-pill:hover .conn-handle.conn-handle.conn-handle-blocked,
.canvas-card.g5-pill:focus-within .conn-handle.conn-handle.conn-handle-blocked { display: none; }

/* ══ USER-SIX-R5 ②（2026-10-11 · Claude Code）拉线圆内十字改**几何自证**居中，撤销 R3 那条猜字体的 padding ══
   依据（用户红字：R3 的 padding-bottom:2px「实测让左右十字更偏」）：Sol r4 真实截图像素口径
   （ACCEPT-sol-r4.json；Δ = 墨迹质心 − 圆几何中心，见 p2.<side>.ink-centred）量出 top 1.239 / bottom 0.806，
   而 **left 1.826 / right 1.826** px；同一口径、同一阈值下 r31 原始字节的 left/right 只有 0.857
   （p2.ink-residual-improves-vs-r31）⇒ 那条加在字号行盒上的 2px 补偿把左右两柄**推得更远**，不是更近。
   根因：padding 补的是**行盒**，而字形墨迹相对行盒的偏移量随字体度量（ascent/descent）逐族变化；
   用某个假想字族的度量算出来的像素数，对同一 font-size 下的四个柄是同一个位移，且只对那一族成立 ⇒ 任何「猜字体」的像素补偿都不是几何。
   修法（最小、零字体依赖、零库）：把 `+` 字形**停画**（font-size:0；**文本节点仍留在 DOM**，可访问名字本来来自
   工厂 main.js:2362 的 title="拖出连线 · 卡片直连，空白创建"，不靠字形），改用 ::after 画正交两条 1px 笔画：
   8px×8px 的 ::after 由基座既有 flex 居中（refinement.css:392 已是 display:flex + align-items:center + justify-content:center），
   横画 background-size 8px 1px、竖画 1px 8px，两者都 background-position:center center ⇒
   **十字的几何中心 = ::after 中心 = 圆中心**，与字体族/度量无关（跨字体同一个像素结果，这才是几何）。
   笔画色 currentColor（继承基座 color: var(--u6-ink, #3a3b36)）；**无背景色方块**（只设 background-image，不设画块的 background-color，
   也不碰基座画圆用的 background: var(--u6-paper)）；::after 上 pointer-events:none，不吃指针。
   **几何零改**：18px 圆 / border / border-radius 全在 refinement.css:392 未触碰；padding-bottom 归 0（撤销猜测，非新增补偿）；
   ::after 不参与命中 ⇒ elementFromPoint 命中面、resize 让渡 18×6px、骑边定位（left/top + translate(-50%,-50%)）、
   柄 z（:211 的 z-index:11、:320 的 9501）、blocked 的 display:none（:322-331）、connHandleSync 择边与
   nearestreachable 全逐字节不变；**不抬整卡**。验收由 Sol 的真实像素口径裁决：四边 |墨迹质心 − 圆中心| 必须过阈值。 */
.canvas-card .conn-handle.conn-handle { padding-bottom: 0; font-size: 0; }
.canvas-card .conn-handle.conn-handle::after { content: ""; display: block; width: 8px; height: 8px; pointer-events: none; background-color: transparent; background-image: linear-gradient(currentColor, currentColor), linear-gradient(currentColor, currentColor); background-size: 8px 1px, 1px 8px; background-position: center center, center center; background-repeat: no-repeat, no-repeat; }

/* ══ USER-SIX-R6 ①（2026-10-11 · Claude Code）pill 提交箭头**去底色**＝与三态/composer 发送一致 ══
   依据（用户裁决 + Sol r5 真跑唯一实际 FAIL）：`ACCEPT-sol-r5.json` 的 `p3.disabled-state` —— 只读态产品**移除**
   composer（`readonlyComposer {composerCount:0, ctlCount:0}`）、改渲 pill；`.g5-pill-submit[data-gen-exec]` 仍在，
   执行链**零泄漏**（零 POST：postsBefore 1→postsAfter 1；零 change：0→0；闸 `main.js` 零改）——**拒写语义是对的**，
   错的是**观感**：同一颗发送箭头的底色，写态 `execStyleWritable.bg = rgba(0, 0, 0, 0)`（无底色），
   只读态 `execStyleReadonly.bg = rgb(184, 134, 11)`（不透明金）⇒ 三态之间底色不一致。
   该金 = 主题 `--accent-ui: #B8860B`（uiopt-r6-theme.css:28）。
   根因：`genpill-r2.css:13` 给 `.gen-pill.g5-pill-r2 > button.g5-pill-submit` 铺了 `background: var(--surface, #fff)`，
   `:14` 的 `:hover` 铺了 `background: var(--accent-ui, #1d4ed8)`；本文件在 index.html:31 引入，晚于 genpill-r2.css(:27)，
   且本选择器同链加一节 `.canvas-card` ⇒ 特异度 base (0,4,1) > 旧 (0,3,1)、`:hover` (0,5,1) > 旧 (0,4,1)，稳胜不需靠加载顺序。
   修法（最小、单叶、零库）：只把**底色**改透明（`background: transparent` + `background-image: none`），
   颜色对齐 composer 的发送钮（本文件 :241 `.gen-composer .gen-controls .gen-run-icon` 的 `color: var(--u6-ink, #3a3b36)`）
   ⇒ 箭头在当前浅底 pill 上仍**可见**、且三态同一个视觉。
   **零改（逐条）**：`:13` 其余声明逐字保留——26px 宽高/min-width/flex/box-sizing/padding/圆角/边框/cursor/overflow、
   命中面与 pointer-events、svg 15px（`:15`）、`.g5-pill-fill` 进度底（`:8`，被 background-image:none 的选择器**不**命中）、
   pill 本体底（uiopt-r5.css:19）、`data-gen-exec` 委托与 `g5HandoffCheck → g5RealSubmit` 执行链、只读写闸、
   disabled 语义（**不造** disabled、**不隐藏**按钮、**不恢复**旧 UI 方向）、层级、card、main.js 与 native 任何其他叶。
   验收由 Sol 的唯一一次真跑裁决本条的 computed bg 是否回到透明族。 */
.canvas-card .gen-pill.g5-pill-r2 > button.g5-pill-submit,
.canvas-card .gen-pill.g5-pill-r2 > button.g5-pill-submit:hover,
.canvas-card .gen-pill.g5-pill-r2 > button.g5-pill-submit:focus,
.canvas-card .gen-pill.g5-pill-r2 > button.g5-pill-submit:focus-visible { background: transparent; background-image: none; color: var(--u6-ink, #3a3b36); }

/* ── B-UI-OUTPUT-MODELS-R1（2026-10-11，用户裁决 USER-DECISION.md）──
   生成器卡「多输出模型分配」+「参考文件真实缩略图」窄补丁。全部为新增类，零改既有规则一行字节；
   只用既有主题 token（--u6-ink/--u6-ink-soft/--u6-line/--u6-dark/--u6-gold/--accent-ui/--r-pill），零新颜色。
   几何合同：八控件四列两排（.gen-controls / .gen-run-icon）；.gen-out-alloc 占下排右侧，
   .gen-out-frames 是 .gen-composer 后继子元素 ⇒ 向下展开，不绝对定位、不遮历史/工具/输入。张数=1 时整块不渲染。 */

.gen-out-alloc { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; padding: 1px 0 0; }
.gen-out-alloc-label { font-size: 10px; line-height: 1; color: var(--u6-ink-soft, #737772); }
.gen-out-mode { height: 23px; padding: 0 9px; border: 1px solid var(--u6-line, #dcdcd6); border-radius: var(--r-pill, 999px); background: transparent; color: var(--u6-ink, #3a3b36); font-size: 11px; line-height: 1; cursor: pointer; }
.gen-out-mode:hover:not(:disabled) { background: var(--u6-paper, #f1f2ef); }        /* 真实 hover 态，非装饰 */
.gen-out-mode[aria-checked="true"] { background: var(--u6-dark, #26352f); border-color: var(--u6-dark, #26352f); color: #fff; }
.gen-out-mode[aria-checked="true"]:hover { background: var(--u6-dark, #26352f); }
.gen-out-mode:disabled { opacity: .45; cursor: not-allowed; }
.gen-out-mode:focus-visible { outline: 2px solid var(--accent-ui, #4f8a72); outline-offset: 1px; } /* 键盘焦点环 */

.gen-out-frames { display: grid; grid-template-columns: repeat(auto-fill, minmax(148px, 1fr)); gap: 4px; }
.gen-out-frame { display: flex; align-items: center; gap: 4px; min-width: 0; height: 23px; padding: 0 5px; border: 1px solid var(--u6-line, #dcdcd6); border-radius: 8px; }
.gen-out-frame:focus-within { border-color: var(--accent-ui, #4f8a72); }
.gen-out-no { flex: 0 0 auto; font-size: 10px; line-height: 1; color: var(--u6-ink-soft, #737772); }
.gen-out-frame > select { min-width: 0; flex: 1 1 auto; }

.gen-out-note { font-size: 10px; line-height: 1.35; color: var(--u6-ink, #3a3b36); }

/* IMG-01.04 / IMG-02.02-02.04: the real canvas card owns the lower-right
   eighth cell; per-output frames stay outside the fixed two-row controls. */
.canvas-card .generator-body.gen-compact .gen-composer .gen-controls > .gen-out-alloc { grid-column: 4; grid-row: 2; min-width: 0; min-height: 0; padding: 0; gap: 4px; overflow: visible; }
.canvas-card .generator-body.gen-compact .gen-composer .gen-controls > .gen-out-alloc .gen-out-alloc-label { display: none; }
.canvas-card .generator-body.gen-compact .gen-composer .gen-controls > .gen-out-alloc .gen-out-mode { width: 100%; min-width: 0; padding-inline: 5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.canvas-card .generator-body.gen-compact .gen-composer > .gen-out-frames { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 5px; margin-top: 6px; }
.canvas-card .generator-body.gen-compact .gen-composer > .gen-out-frames .gen-out-frames-title { grid-column: 1 / -1; font-size: 10px; color: var(--u6-ink-soft, #737772); }
.canvas-card .generator-body.gen-compact .gen-composer > .gen-out-frames .gen-out-frame { min-width: 0; }
.canvas-card .generator-body.gen-compact .gen-composer > .gen-out-note { margin-top: 4px; }

/* IMG-01.04 visual alignment R3: every matrix cell is a full 26px row.
   Override inherited flex-end/auto sizing without changing the DOM or data. */
.canvas-card .generator-body.gen-compact .gen-composer .gen-controls { align-items: stretch; }
.canvas-card .generator-body.gen-compact .gen-composer .gen-controls > .gen-ctl,
.canvas-card .generator-body.gen-compact .gen-composer .gen-controls > .gen-run-icon,
.canvas-card .generator-body.gen-compact .gen-composer .gen-controls > .gen-out-alloc {
  box-sizing: border-box;
  height: 26px;
  min-height: 26px;
  max-height: 26px;
  align-self: stretch;
  align-items: center;
}
.canvas-card .generator-body.gen-compact .gen-composer .gen-controls > .gen-ctl { display: grid; }
.canvas-card .generator-body.gen-compact .gen-composer .gen-controls > .gen-ctl svg,
.canvas-card .generator-body.gen-compact .gen-composer .gen-controls > .gen-ctl select {
  align-self: center;
}
.canvas-card .generator-body.gen-compact .gen-composer .gen-controls > .gen-ctl select { height: 26px; line-height: 26px; }
.canvas-card .generator-body.gen-compact .gen-composer .gen-controls > .gen-run-icon { place-items: center; }
.canvas-card .generator-body.gen-compact .gen-composer .gen-controls > .gen-out-alloc { display: flex; }
.canvas-card .generator-body.gen-compact .gen-composer .gen-controls > .gen-out-alloc .gen-out-mode { height: 26px; line-height: 24px; }

/* 参考文件「没有像素」时的可见标记（不靠 hover 才现身；整句原因仍在 title 与既有 flash 面）。
   .gen-ref-item span 既有 max-width:45px+ellipsis（refinement.css:5296）会把长状态截断，故此处只加短徽标。 */
.gen-ref-strip .gen-ref-bound .gen-ref-flag { position: absolute; top: -5px; left: -5px; z-index: 3; padding: 0 3px; border-radius: 5px; background: var(--u6-gold, #b8860b); color: #fff; font-size: 8px; font-weight: 600; line-height: 12px; font-style: normal; pointer-events: none; }
.gen-ref-strip .gen-ref-bound.ref-ready { outline: 1px solid var(--u6-line, #dcdcd6); outline-offset: -1px; } /* 已读入像素态：outline 不参与布局 ⇒ 既有 42px 拇指几何零改 */

/* USER-DECISION.md + coordinator 06:17「完整缩略图应整图 contain 而非 cover 裁边」：参考条里每一张真缩略图整图显示、不裁切。
   选择器 (0,2,1) > refinement.css:5295 的 .gen-ref-item img (0,1,1)，只覆盖 object-fit 一个属性；
   width/height/圆角/阴影等既有几何一字沿用 ⇒ 38×42 拇指盒零位移、参考条高度零变。衬底用既有 --u6-paper
   （与既有 contain 缩略图同法，见 refinement.css:5056），不是新颜色。 */
.gen-ref-strip .gen-ref-item img { object-fit: contain; background: var(--u6-paper, #e9e6dd); }

/* ── B-UI-OUTPUT-MODELS-R2（2026-10-11）─────────────────────────────────────────────────────────────────────
   显示序改为「绑定身份序」后新增的两个占位面（纯追加，上文 R1 段一字未动）：
   ① 原图缺失（genMainRef 还在、条目已断线/删除）：图1 位置**留名不递补**，参考图从图2 起。
      几何对齐既有拇指盒：::before 撑出 38×42（refinement.css:5295 的 img 盒），.gen-ref-item 既有
      47px 列宽/flex column 直接复用 ⇒ 参考条 min-height:51px 与既有拇指零位移；虚线+斜纹=「这里本该有图」
      的诚实占位，不是装饰。disabled ⇒ 不可拖、不进 tab 序（只读/键盘合同不变）。
   ② 悬停浮层的同名占位复用既有 .g5-pop-ref / .g5-pop-ref-broken 外观（genpill-r2.css:22），无需新规则。 */
.gen-ref-strip .gen-ref-item.gen-ref-missing { width: 47px; cursor: default; }
.gen-ref-strip .gen-ref-item.gen-ref-missing::before { content: ""; box-sizing: border-box; width: 38px; height: 42px; border: 1px dashed var(--u6-line, #dcdcd6); border-radius: 6px; background: repeating-linear-gradient(45deg, transparent 0 5px, rgba(0, 0, 0, .05) 5px 10px); }
.gen-ref-strip .gen-ref-item.gen-ref-missing .gen-ref-missing-tag { color: var(--u6-ink-soft, #737772); }
.gen-ref-strip .gen-ref-item.gen-ref-missing .gen-ref-no { background: rgba(120, 60, 10, .78); } /* 图1 位仍在，用警示底与真图徽标区分 */

/* IMG-01.05 / IMG-02.04 R4：生成卡控件视觉收束（真实 canvas surface only）。
   提示词 textarea 不在此作用域，保持正文可读；八个参数本体共享同一字号/行高，
   仍保留四列×两行 26px 几何与原生 select/submit 行为。 */
.canvas-card .generator-body.gen-compact .gen-composer .gen-controls > .gen-ctl,
.canvas-card .generator-body.gen-compact .gen-composer .gen-controls > .gen-ctl select,
.canvas-card .generator-body.gen-compact .gen-composer .gen-controls > .gen-run-icon,
.canvas-card .generator-body.gen-compact .gen-composer .gen-controls > .gen-out-alloc,
.canvas-card .generator-body.gen-compact .gen-composer .gen-controls > .gen-out-alloc .gen-out-mode {
  font-size: 11px;
  line-height: 1;
  font-weight: 400;
}
.canvas-card .generator-body.gen-compact .gen-composer .gen-controls > .gen-ctl select {
  font: inherit;
}

/* The allocation switch remains identifiable without a dark block; checked,
   hover, and focus-visible retain separate channels for keyboard/action state. */
.canvas-card .generator-body.gen-compact .gen-composer .gen-controls > .gen-out-alloc .gen-out-mode[aria-checked="true"] {
  background: color-mix(in srgb, var(--accent-ui, #4f8a72) 16%, var(--surface, #fffdf9));
  border-color: var(--accent-ui, #4f8a72);
  color: var(--u6-ink, #3a3b36);
}
.canvas-card .generator-body.gen-compact .gen-composer .gen-controls > .gen-out-alloc .gen-out-mode[aria-checked="true"]:hover {
  background: color-mix(in srgb, var(--accent-ui, #4f8a72) 24%, var(--surface, #fffdf9));
}
.canvas-card .generator-body.gen-compact .gen-composer .gen-controls > .gen-out-alloc .gen-out-mode:focus-visible {
  outline: 2px solid var(--accent-ui, #4f8a72);
  outline-offset: 1px;
}

/* A's pending per-slot source/model DOM stays local to the slot; normalize the
   existing frame/number/select and the card source button without touching the
   prompt or shared editor controls. */
.canvas-card .generator-body.gen-compact .gen-composer > .gen-out-frames .gen-out-frame,
.canvas-card .generator-body.gen-compact .gen-composer > .gen-out-frames .gen-out-no,
.canvas-card .generator-body.gen-compact .gen-composer > .gen-out-frames .gen-out-frame select,
.canvas-card .generator-body.gen-compact .gen-compact-top .gen-source-toggle {
  font-size: 11px !important;
  line-height: 1 !important;
  font-weight: 400 !important;
}
.canvas-card .generator-body.gen-compact .gen-composer > .gen-out-frames .gen-out-frame select {
  font: inherit !important;
}

/* The template library stays in the expanded card frame. The tray is a bounded
   flex column and only its real list scrolls, so the final item remains reachable
   by wheel/keyboard instead of being hidden by an ancestor clip. */
.canvas-card.g5-expanded .generator-body.gen-compact .g5-tray.g5-tray-wf {
  min-height: 0;
  max-height: min(300px, 42vh);
  display: flex;
  flex-direction: column;
  overflow: visible;
}
.canvas-card.g5-expanded .generator-body.gen-compact .g5-tray.g5-tray-wf .g5-wf-cats {
  flex: 0 0 auto;
}
.canvas-card.g5-expanded .generator-body.gen-compact .g5-tray.g5-tray-wf .g5-wf-list {
  min-height: 0;
  max-height: none;
  flex: 1 1 auto;
  overflow-y: auto;
  overflow-x: hidden;
  overscroll-behavior: contain;
}

/* R5 correction: g5TrayHTML is a child of generator-body, alongside
   .gen-compact-content (main.js:2398), not a body sibling.  Let expanded wf
   content and its tray participate in the body's natural height so the
   existing g5SyncBodyH measurement sees both children; the list alone scrolls. */
.canvas-card.g5-expanded .generator-body.gen-compact {
  height: auto;
  min-height: 0;
  flex: 0 0 auto;
  overflow: visible;
}
.canvas-card.g5-expanded .generator-body.gen-compact > .gen-compact-content {
  height: auto;
  min-height: 0;
  flex: 0 0 auto;
}
.canvas-card.g5-expanded .generator-body.gen-compact > .g5-tray.g5-tray-wf {
  flex: 0 0 auto;
  min-height: 0;
}

/* Pending slot contract: [number][source] / [icon][model].  Two rows keep
   source and model readable in each half-width frame without changing the
   primary eight-cell matrix. */
.canvas-card .generator-body.gen-compact .gen-composer > .gen-out-frames .gen-out-frame {
  display: grid;
  grid-template-columns: 44px minmax(0, 1fr);
  grid-template-rows: minmax(0, 1fr) minmax(0, 1fr);
  align-items: center;
  column-gap: 4px;
  row-gap: 0;
  height: 46px;
  line-height: 1 !important;
}
.canvas-card .generator-body.gen-compact .gen-composer > .gen-out-frames .gen-out-frame > .gen-out-no { grid-column: 1; grid-row: 1; min-width: 0; }
.canvas-card .generator-body.gen-compact .gen-composer > .gen-out-frames .gen-out-frame > .gen-source-toggle { grid-column: 2; grid-row: 1; min-width: 0; font-size: 11px !important; line-height: 1 !important; font-weight: 400 !important; }
.canvas-card .generator-body.gen-compact .gen-composer > .gen-out-frames .gen-out-frame > svg { grid-column: 1; grid-row: 2; justify-self: center; }
.canvas-card .generator-body.gen-compact .gen-composer > .gen-out-frames .gen-out-frame > select { grid-column: 2; grid-row: 2; min-width: 0; font-size: 11px !important; line-height: 1 !important; font-weight: 400 !important; }
.canvas-card .generator-body.gen-compact .gen-composer > .gen-out-frames .gen-out-frame > .gen-source-toggle:focus-visible,
.canvas-card .generator-body.gen-compact .gen-composer > .gen-out-frames .gen-out-frame > select:focus-visible { outline: 2px solid var(--accent-ui, #4f8a72); outline-offset: 1px; }

/* Sol integration: main catalog select has an inline font-size; narrow slots keep the source toggle readable. */
.canvas-card .generator-body.gen-compact .gen-composer .gen-controls select[data-generation-model] { font-size: 11px !important; }
.canvas-card .generator-body.gen-compact .gen-composer > .gen-out-frames { grid-template-columns: repeat(auto-fit, minmax(min(100%, 240px), 1fr)); }

/* ── IMG-01.04 / IMG-02.04 R43（2026-10-11 用户截图裁决 · 两项有限布局修改）────────────────────────────
   ① 逐输出槽=单行：编号 / API-ComfyUI 来源开关 / 模型图标+下拉 **同一行**。
      替代 :552-570 的 46px 两行网格（[编号|开关] / [图标|下拉]）。DOM 序一字未动
      （编号 span → 来源开关 button → 图标 svg → 模型 select，见 main.js:2303），只把该框由 grid 两行
      改回行内 flex 并压到 23px（同 :401 基态）⇒ 视觉序=DOM 序=焦点序，且无横向溢出。
      :565-568 的子项 grid-column/grid-row/justify-self 在 flex 容器下自动失效，无需逐条撤销（其
      font-size:11px !important 仍生效=字号合同不变）。
   ② 右列六钮单列：面板/连线本就位于 .ed-workflow-tools；参考图/清空/复制/发送由 edRailActionsHtml
      渲染进同组 ⇒ 组既有 flex column + align-items:center（refinement.css:5160）即得「同列、同中心线、
      y 递增=DOM 序=焦点序」。此处只补发送钮的行内 32×32 几何（其 44px 侧栏 refinement.css:4921 与
      34px 正文行 uiopt-r4.css:242 两套几何均不适用于右列）。 */
.canvas-card .generator-body.gen-compact .gen-composer > .gen-out-frames .gen-out-frame {
  display: flex;
  flex-direction: row;
  align-items: center;
  column-gap: 4px;
  row-gap: 0;
  height: 23px;
  min-height: 23px;
  padding: 0 5px;
  line-height: 1 !important;
}
.canvas-card .generator-body.gen-compact .gen-composer > .gen-out-frames .gen-out-frame > svg { flex: 0 0 auto; }
/* 来源开关两枚 span 纵向内边距 4px→2px：11px 字号下让开关(≈25px)收进 23px 单行内不越框；
   零新颜色/零新 token，横向 5px→4px 仅随之内收。 */
.canvas-card .generator-body.gen-compact .gen-composer > .gen-out-frames .gen-out-frame > .gen-source-toggle span { padding: 2px 4px; }

.editor-layer.ws[data-ed-demo] .ws .ed-toolbar .ed-workflow-tools .ed-c-send {
  position: static;
  flex: 0 0 32px;
  width: 32px;
  min-width: 0;
  height: 32px;
  min-height: 0;
  align-self: center;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  border: 0;
  border-radius: 8px;
  background: transparent;
  color: var(--u6-ink, #3a3d38);
  opacity: 1;
  cursor: pointer;
  pointer-events: auto;
  transition: color .15s ease;
}
/* 图标不参与命中：按钮中心点命中=发送钮本体（aria-label="发送"）——「命中即控件」，非图标碎片。
   点击仍由 root 级委托 closest('[data-ed-c-send]') 承接，零第二提交链。 */
.editor-layer.ws[data-ed-demo] .ws .ed-toolbar .ed-workflow-tools .ed-c-send svg { width: 16px; height: 16px; pointer-events: none; }
.editor-layer.ws[data-ed-demo] .ws .ed-toolbar .ed-workflow-tools .ed-c-send:hover:not([disabled]) { color: var(--u6-ink, #3a3d38); background: rgba(28, 38, 33, .10); }
.editor-layer.ws[data-ed-demo] .ws .ed-toolbar .ed-workflow-tools .ed-c-send[disabled] { opacity: .3; cursor: not-allowed; }
.editor-layer.ws[data-ed-demo] .ws .ed-toolbar .ed-workflow-tools .ed-c-send:focus-visible { outline: 2px solid var(--accent-ui, #4f8a72); outline-offset: -2px; }
