.drawer-context strong,
.drawer-context small {
  display: block;
}
.drawer-context small { margin-top: 4px; color: var(--u6-ink-soft, #969790); font-size: 8px; }

.material-filter {
  display: flex;
  gap: 5px;
  padding: 0 14px 10px;
}

.material-filter button {
  border: 0;
  border-radius: 6px;
  padding: 6px 8px;
  background: transparent;
  color: var(--u6-ink-soft, #8c8d87);
  font-size: 8px;
}

.material-filter button.active { background: var(--u6-paper, #e5e9e4); color: var(--u6-ink, #365444); }

.file-count {
  min-width: 20px;
  margin-left: auto;
  padding: 2px 6px;
  border-radius: 999px;
  background: var(--u6-paper, #e9e9e3);
  color: var(--u6-ink-soft, #898b84);
  font-size: 8px;
  font-weight: 500;
  text-align: center;
}

.rail-icon-wrap {
  position: relative;
  width: 24px;
  height: 24px;
  display: grid;
  place-items: center;
}

.rail-count {
  position: absolute;
  top: -7px;
  right: -10px;
  min-width: 17px;
  height: 15px;
  padding: 0 4px;
  border: 2px solid var(--u6-line, #f9f8f4);
  border-radius: 999px;
  background: var(--u6-flag, #cc6f5d);
  color: #fff;
  font-size: 7px;
  font-style: normal;
  line-height: 11px;
  text-align: center;
}

.tree-row.folder { cursor: pointer; }
.file-search input {
  min-width: 0;
  flex: 1;
  border: 0;
  outline: 0;
  background: transparent;
  color: var(--u6-ink, #555852);
  font-size: 11px;
}
.file-search input::placeholder { color: var(--u6-ink-soft, #a0a19b); }
.empty-files { padding: 28px 12px; color: var(--u6-ink-soft, #999b94); font-size: 10px; text-align: center; }

/* R8：真正的项目文件树与多来源素材浏览器 */
.sidebar { min-width: 280px; max-width: 560px; }
.sidebar-resizer { position: absolute; z-index: 4; right: -4px; top: 0; width: 8px; height: 100%; cursor: ew-resize; }
.sidebar-resizer:hover::after { content: ''; position: absolute; left: 3px; inset-block: 0; width: 2px; background: var(--u6-dark, #6f8b79); }
.file-toolbar { display: flex; gap: 7px; padding: 0 12px 10px; }
.file-toolbar .sidebar-search { flex: 1; margin: 0; }
.file-toolbar > button { display: flex; align-items: center; gap: 4px; border: 1px solid var(--u6-line, #d9d9d1); border-radius: 7px; background: var(--u6-paper, #f6f5f0); color: var(--u6-ink, #535952); padding: 0 9px; font-size: 9px; cursor: pointer; }
.create-location { display: flex; align-items: center; gap: 7px; min-height: 28px; margin: -3px 12px 7px; padding: 0 9px; border-left: 2px solid var(--u6-line, #6f8b79); background: var(--u6-paper, #f0f2ed); color: var(--u6-ink-soft, #898c85); font-size: 8px; }
.create-location strong { min-width: 0; overflow: hidden; color: var(--u6-ink, #48574e); font-size: 9px; text-overflow: ellipsis; white-space: nowrap; }
.tree-list { padding: 8px 10px 72px; overflow: auto; }
/* W1-K：紧凑竖向树。主体 = 图标 + 竖向层级 + 缩进 + 连续树线；文字降为短标签；仅目录有子项才出现小 chevron 展开箭头；聚焦/拖放为克制背景 + 细线，无大胶囊。 */
.tree-root { position: relative; z-index: 2; display: flex; align-items: center; gap: 7px; margin: 0 0 2px; padding: 3px 8px; border-radius: 6px; background: transparent; cursor: pointer; }
.tree-root-icon { display: grid; flex: 0 0 20px; width: 20px; height: 20px; place-items: center; color: var(--u6-ink-soft, #53675b); }
.tree-root-icon svg { width: 15px; height: 15px; }
.tree-root strong { min-width: 0; overflow: hidden; color: var(--u6-ink, #3f4641); font-size: 10px; font-weight: 620; text-overflow: ellipsis; white-space: nowrap; }
.tree-root small { flex: 0 0 auto; color: var(--u6-ink-soft, #92968f); font-size: 8px; letter-spacing: .02em; }
.tree-forest { position: relative; padding: 0 0 8px; }
.tree-forest::before { content: ''; position: absolute; left: 9px; top: 0; bottom: 8px; border-left: 1.5px solid var(--u6-line, #c6cdc8); }
.tree-node { position: relative; }
.tree-row { position: relative; z-index: 1; display: flex; align-items: center; gap: 5px; height: auto; min-height: 26px; padding: 0 6px 0 calc(16px + var(--depth) * 16px); border: 0; border-radius: 5px; background: transparent; color: var(--u6-ink, #4a4f4b); transition: background .12s ease, color .12s ease; }
.tree-row::before { content: ''; position: absolute; left: 9px; top: 50%; width: calc(26px + var(--depth) * 16px); border-top: 1.5px solid var(--u6-line, #c6cdc8); transform: translateY(-50%); pointer-events: none; }
.tree-row.file { cursor: grab; }
.tree-row.folder { font-weight: 560; color: var(--u6-ink, #3f4a44); }
.tree-row:hover { background: var(--u6-paper, #eef1ec); }
.tree-row.focused { background: var(--u6-paper, #e5ece6); box-shadow: inset 2px 0 0 #6f8b79; color: var(--u6-ink, #2f4036); }
.tree-row.drop-target { background: var(--u6-paper, #dce7df); box-shadow: inset 0 0 0 1.5px #72907c; }
.tree-row.locked { color: var(--u6-ink-soft, #8b8f89); background: var(--u6-paper, #f4f3ee); }
.tree-arrow { flex: 0 0 14px; width: 14px; height: 16px; display: grid; place-items: center; border: 0; padding: 0; background: transparent; border-radius: 4px; color: var(--u6-ink-soft, #8a918c); cursor: pointer; }
.tree-arrow svg { width: 10px; height: 10px; }
.tree-arrow:hover { background: var(--u6-paper, #e2e6e1); color: var(--u6-ink, #3f4a44); }
.tree-node-icon { display: grid; flex: 0 0 18px; width: 18px; height: 18px; place-items: center; border-radius: 4px; }
.tree-node-icon svg { width: 18px; height: 18px; }
.tree-node-icon.folder-shape { color: var(--u6-ink-soft, #5a6b60); }
.tree-node-icon.file-shape { color: var(--u6-ink-soft, #7a847c); }
.file-name { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 9px; letter-spacing: .005em; }
.tree-row.focused .file-name { font-weight: 560; }
.file-count { flex: 0 0 auto; color: var(--u6-ink-soft, #9ba09b); font-size: 7.5px; }
.file-type { flex: 0 0 auto; margin-left: auto; color: var(--u6-ink-soft, #a4a8a3); font-size: 7px; letter-spacing: .04em; }
.tree-lock { flex: 0 0 auto; width: 18px; height: 18px; margin-left: auto; display: grid; place-items: center; border: 0; background: transparent; border-radius: 4px; color: var(--u6-ink-soft, #8e9089); cursor: pointer; }
.tree-lock svg { width: 12px; height: 12px; }
.tree-lock:hover { background: var(--u6-paper, #e2e6e1); color: var(--u6-ink, #55625b); }
.drag-hint { flex: 0 0 auto; margin-left: 0; color: var(--u6-ink-mute, #c0c3bf); font-size: 9px; letter-spacing: 1px; }
.file-drop-zone { margin: 10px 4px; border: 1px dashed var(--u6-line, #c8c9c1); border-radius: 8px; padding: 13px 8px; color: var(--u6-ink-soft, #969891); font-size: 9px; text-align: center; }
.material-toolbar { display: flex; align-items: flex-start; gap: 8px; padding: 0 12px 10px; }
.material-scopes { display: flex; flex: 1; gap: 4px; overflow-x: auto; scrollbar-width: none; }
.material-scopes button, .view-switch button { flex: 0 0 auto; border: 0; border-radius: 6px; background: transparent; color: var(--u6-ink-soft, #858880); padding: 6px 7px; font-size: 8px; cursor: pointer; }
.material-scopes button.active, .view-switch button.active { background: var(--u6-paper, #e3e9e4); color: var(--u6-ink, #365444); }
.view-switch { display: flex; border-left: 1px solid var(--u6-line, #dddcd5); padding-left: 5px; }
.material-list.grid-view { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; padding: 4px 12px 70px; overflow: auto; }
.material-list.grid-view .material-item { display: block; padding: 0; overflow: hidden; text-align: left; }
.material-list.grid-view .material-thumb { width: 100%; height: 92px; }
.material-list.grid-view .material-item > div:nth-child(2) { padding: 8px; }
.material-list.grid-view .material-item em { position: absolute; right: 7px; top: 7px; background: rgba(250,249,246,.86); padding: 3px 5px; border-radius: 4px; }
.source-empty { margin: 22px 14px; padding: 18px 14px; border: 1px dashed var(--u6-line, #d1d1ca); border-radius: 9px; color: var(--u6-ink-soft, #777a73); }
.source-empty strong { display: block; font-size: 11px; }
.source-empty p { font-size: 9px; line-height: 1.6; color: var(--u6-ink-soft, #969891); }
.source-empty button { border: 0; border-radius: 6px; padding: 7px 9px; font-size: 8px; }

/* W1-K：四分类素材缩略图变体 —— 统一淡描边、统一 6px 圆角、干净行式列表项（去卡片套卡片） */
.material-thumb.thumb-group,
.material-thumb.thumb-collection,
.material-thumb.thumb-file,
.material-thumb.thumb-card { border: 1px solid rgba(60,70,64,.08); background: #eef0eb; }
.material-thumb.thumb-group::before, .material-thumb.thumb-group i,
.material-thumb.thumb-collection::before, .material-thumb.thumb-collection i,
.material-thumb.thumb-file::before, .material-thumb.thumb-file i { display: none; }
.material-thumb.thumb-group { display: grid; place-items: center; }
.mthumb-stack { position: absolute; width: 26px; height: 20px; border: 2px solid var(--u6-line, #f6f5f0); border-radius: 3px; box-shadow: var(--sh-rest); }
.mthumb-stack.a { left: 9px; top: 9px; background: linear-gradient(150deg,var(--u6-gold, #d8b38d),var(--u6-gold, #b98d63)); transform: rotate(-7deg); }
.mthumb-stack.b { left: 16px; top: 14px; background: linear-gradient(150deg,#a9c4d4,#7f97a5); transform: rotate(5deg); }
.mthumb-stack.c { left: 23px; top: 19px; background: linear-gradient(150deg,var(--u6-wash, #91a99a),var(--u6-dark, #6b806f)); transform: rotate(-2deg); }
.mthumb-col { display: grid; place-items: center; width: 100%; height: 100%; border-radius: 5px; background: linear-gradient(150deg,var(--u6-paper, #e4e0d3),var(--u6-paper, #d4d9cf)); color: var(--u6-ink, #4c5a52); font-size: 15px; font-weight: 650; }
.mthumb-file { display: grid; place-items: center; width: 100%; height: 100%; border-radius: 5px; background: var(--u6-paper, #e8ede8); color: var(--u6-ink-soft, #6b7a70); }
.mthumb-file svg { width: 20px; height: 20px; }
.material-thumb.thumb-card { display: block; }
.material-thumb.thumb-card i { display: none; }
.material-thumb.thumb-card::before { content: ''; position: absolute; left: 7px; right: 6px; bottom: 7px; height: 9px; background: #d4d0c2; transform: skewY(-8deg); }
.mthumb-card { position: relative; display: grid; place-items: center; width: 100%; height: 100%; border-radius: 5px; background: linear-gradient(155deg,var(--u6-wash, #9fb0bb) 0 48%,var(--u6-dark, #77776e) 49%); }
.mthumb-card svg { position: relative; z-index: 1; width: 16px; height: 16px; color: #fff; opacity: .92; filter: drop-shadow(0 1px 1px rgba(0,0,0,.35)); }

/* W1-K：外部灵感 —— 诚实标注「外部接口待接入」+ 真实可用的本机导入入口（不伪装已联网加载 Pinterest） */
.external-source { padding: 6px 12px 70px; }
.external-note { border: 1px dashed var(--u6-line, #d1d1ca); border-radius: 9px; background: var(--u6-paper, #fbfaf6); padding: 14px 12px; }
.external-note strong { display: flex; align-items: center; gap: 5px; color: var(--u6-ink-soft, #55635c); font-size: 10px; }
.external-note strong svg { width: 13px; height: 13px; }
.external-note p { margin: 8px 0 0; color: var(--u6-ink-soft, #8b8e87); font-size: 8.5px; line-height: 1.6; }
.external-actions { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin: 12px 2px 0; }
.external-import { display: flex; align-items: center; gap: 6px; border: 1px solid var(--u6-line, #4a6355); background: var(--u6-paper, #eef2ec); color: var(--u6-pick-deep, #3c5c4a); border-radius: 7px; padding: 8px 11px; font-size: 9px; cursor: pointer; }
.external-import svg { width: 13px; height: 13px; }
.external-import:hover { background: var(--u6-paper, #e2eae2); }
.external-actions > span { color: var(--u6-ink-soft, #9a9c96); font-size: 8px; }
.external-drop { margin-top: 12px; border: 1.5px dashed var(--u6-line, #b9c2bb); border-radius: 9px; padding: 22px 10px; display: flex; flex-direction: column; align-items: center; gap: 5px; color: var(--u6-ink-soft, #7c837e); text-align: center; }
.external-drop svg { width: 20px; height: 20px; color: var(--u6-ink-soft, #8a938d); }
.external-drop strong { font-size: 9.5px; color: var(--u6-ink-soft, #5b6560); }
.external-drop small { font-size: 7.5px; color: var(--u6-ink-soft, #a1a49e); }
.external-drop.drop-target { background: var(--u6-paper, #e3ebe4); border-color: var(--u6-line, #6f8b79); }

/* ============ W1-O：项目文件参考图对标 ============
   大标题/文件夹分节/当前项目钉选/根目录/分支树；弱化工程计数与类型徽标。 */
.file-sidebar .sidebar-top { height: 60px; padding: 0 12px 0 18px; }
.file-sidebar .sidebar-top strong { font-size: 18px; font-weight: 520; letter-spacing: -.02em; }
.file-sidebar .sidebar-tabs { padding: 0 12px; }
.file-sidebar .sidebar-tabs button { padding: 11px 8px; font-size: 11px; }
.file-sidebar .file-toolbar { padding: 10px 12px 8px; }
.file-sidebar .create-location { min-height: 24px; margin: 0 12px 10px; background: transparent; border-left: 1px solid var(--u6-line, #b9c5bd); }
.file-sidebar .tree-list { padding: 0 12px 72px; }
.tree-section-label { margin: 8px 6px 6px; padding-bottom: 7px; border-bottom: 1px solid var(--u6-line, #e2e1da); color: var(--u6-pick, #3e6653); font-size: 10px; font-weight: 620; }
.tree-pin { display: flex; align-items: center; gap: 8px; min-height: 34px; margin: 0 4px 12px; padding: 0 10px; color: var(--u6-ink-soft, #6e746f); }
.tree-pin span { display: grid; width: 21px; height: 21px; place-items: center; color: var(--u6-ink-soft, #65756b); }
.tree-pin strong { overflow: hidden; font-size: 10px; font-weight: 520; text-overflow: ellipsis; white-space: nowrap; }
.tree-root { min-height: 34px; gap: 5px; margin: 0; padding: 0 6px; border-radius: 3px; }
.tree-root-arrow { display: grid; width: 15px; height: 18px; place-items: center; padding: 0; border: 0; background: transparent; color: var(--u6-ink-soft, #747b76); }
.tree-root-icon { flex-basis: 22px; width: 22px; height: 22px; color: var(--u6-ink-soft, #596b60); }
.tree-root strong { font-size: 11px; font-weight: 600; }
.tree-forest { padding: 0 0 10px 9px; }
.tree-forest::before { left: 14px; top: 0; bottom: 12px; border-left: 1px solid var(--u6-line, #d1d6d2); }
.tree-row { min-height: 32px; gap: 6px; padding-left: calc(15px + var(--depth) * 18px); border-radius: 3px; }
.tree-row::before { left: 5px; width: calc(25px + var(--depth) * 18px); border-top: 1px solid var(--u6-line, #d1d6d2); }
.tree-arrow { flex-basis: 15px; width: 15px; }
.tree-node-icon { flex-basis: 20px; width: 20px; height: 20px; }
.tree-node-icon svg { width: 19px; height: 19px; }
.tree-node-icon.folder-shape { color: var(--u6-ink-soft, #627269); }
.file-name { font-size: 10px; color: var(--u6-ink-soft, #666d68); }
.tree-row.folder .file-name { color: var(--u6-ink, #505b54); font-weight: 540; }
.tree-row.focused { background: var(--u6-paper, #edf1ed); box-shadow: inset 2px 0 0 #6f8b79; }
.tree-lock { opacity: 0; margin-left: auto; }
.tree-row:hover .tree-lock, .tree-row.focused .tree-lock, .tree-row.locked .tree-lock { opacity: 1; }
.tree-row-end { margin-left: auto; }
.file-sidebar .file-drop-zone { margin-top: 14px; padding: 10px 8px; border-radius: 3px; }
.ingestion-note-quiet { margin: 4px 8px; padding: 4px 0; border: 0; background: transparent; color: var(--u6-ink-soft, #a0a39e); font-size: 8px; }

/* W1-P：参考图最终对标。层级由缩进、箭头和文件夹图标表达，避免工程连线抢占视觉主体。 */
.file-sidebar .create-location { display: none; }
.file-sidebar .create-location.is-contextual { display: flex; }
.file-sidebar .tree-section-label { margin-top: 12px; padding-bottom: 9px; color: var(--u6-ink, #242a26); font-size: 12px; font-weight: 560; }
.tree-pin { min-height: 38px; margin-bottom: 13px; padding-inline: 11px; }
.tree-pin span { width: 24px; height: 24px; }
.tree-pin span svg { width: 20px; height: 20px; }
.tree-pin strong { color: var(--u6-ink-soft, #5e6560); font-size: 12px; }
.tree-root { min-height: 38px; gap: 7px; }
.tree-root-arrow { width: 18px; }
.tree-root-arrow svg { width: 13px; height: 13px; }
.tree-root-icon { flex-basis: 24px; width: 24px; height: 24px; }
.tree-root-icon svg { width: 21px; height: 21px; }
.tree-root strong { color: var(--u6-ink, #3b423e); font-size: 13px; font-weight: 570; }
.tree-forest { padding-left: 17px; }
.tree-forest::before,
.tree-row::before { content: none; }
.tree-row { min-height: 34px; gap: 7px; padding-left: calc(4px + var(--depth) * 22px); }
.tree-arrow { flex-basis: 18px; width: 18px; }
.tree-arrow svg { width: 12px; height: 12px; }
.tree-node-icon { flex-basis: 23px; width: 23px; height: 23px; }
.tree-node-icon svg { width: 21px; height: 21px; }
.file-name { color: var(--u6-ink-soft, #646a66); font-size: 11.5px; }
.tree-row.folder .file-name { color: var(--u6-ink, #4a514d); font-weight: 540; }
.tree-row.focused { background: var(--u6-paper, #eef1ed); box-shadow: inset 2px 0 0 #768b7d; }
.collection-card { background: var(--u6-paper, #f4f1e9); }
.collection-stack { position: relative; height: calc(100% - 62px); display: grid; place-items: center; overflow: hidden; }
.collection-stack > div { position: absolute; width: 190px; height: 125px; border: 5px solid var(--u6-line, #f9f8f4); border-radius: 7px; background: linear-gradient(145deg,var(--u6-wash, #91a79a),var(--u6-gold, #d0b981)); box-shadow: var(--sh-lift); }
.collection-stack > div:nth-child(1) { transform: translate(-22px,7px) rotate(-7deg); }
.collection-stack > div:nth-child(2) { transform: translate(22px,8px) rotate(7deg); background: linear-gradient(145deg,var(--u6-wash, #9aa9b3),var(--u6-gold, #c9b7a0)); }
.collection-stack > div:nth-child(3) { transform: translateY(-4px); background: linear-gradient(145deg,var(--u6-dark, #65796c),var(--u6-gold, #d3c49d)); }
.collection-stack strong { position: relative; z-index: 2; display: grid; place-items: center; width: 42px; height: 42px; border-radius: 50%; background: rgba(31,42,35,.82); color: #fff; font-size: 13px; }
.collection-stack span { position: absolute; z-index: 2; bottom: 6px; color: var(--u6-ink-soft, #777b74); font-size: 9px; }
.collection-gallery { height: calc(100% - 62px); padding: 10px; display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: 8px; overflow: auto; }
.collection-image { min-height: 105px; border-radius: 7px; background: linear-gradient(145deg,var(--u6-dark, #8ca095),var(--u6-gold, #d0b788)); padding: 8px; display: flex; flex-direction: column; justify-content: flex-end; color: #fff; }
.collection-image span { font-size: 9px; text-shadow: 0 1px 3px rgba(0,0,0,.35); }
.collection-image button { margin-top: 6px; border: 0; border-radius: 5px; padding: 5px; background: rgba(250,249,246,.9); color: var(--u6-ink, #3f4a43); font-size: 8px; cursor: pointer; }

.zoom-control .zoom-value {
  min-width: 45px;
  color: var(--u6-ink-soft, #62655f);
  cursor: pointer;
}

.zoom-control button {
  cursor: pointer;
}

.zoom-control button:hover {
  background: var(--u6-paper, #e9e9e3);
}

.zoom-control button:disabled {
  opacity: .45;
  cursor: default;
}

.zoom-control button:disabled:hover {
  background: transparent;
}

.zoom-control .view-anchor-list {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  max-width: 210px;
  padding: 0 4px;
  overflow-x: auto;
}

/* W1-CB 可见按钮间距 4-6px：item 必须 padding:0（全局 .zoom-control span 有 10px 左右 padding），
   相对定位承载绝对定位的 ×；隐藏 × 不占 flex 横向宽度。 */
.zoom-control .view-anchor-item {
  display: inline-flex;
  align-items: center;
  gap: 1px;
  padding: 0;
  position: relative;
}

/* W1-CA2 紧凑矩形标签（非圆形） */
.zoom-control .view-anchor {
  flex: 0 0 auto;
  min-width: 26px;
  height: 24px;
  padding: 0 7px;
  border: 1px solid var(--u6-line, #c7ccc6);
  border-radius: 4px;
  background: var(--u6-paper, #eef1ed);
  color: var(--u6-ink, #355244);
  font-weight: 700;
}

/* W1-CA2 每个锚点的 × 删除按钮：默认隐藏且不可点，hover/focus-within 显露（可键盘聚焦）
   W1-CB × 改为绝对定位角标（0 flex 宽）：置于锚点右上角，不占相邻可见间距（gap 4-6px），
   且不覆盖主体字母/中心点击区（主体中心 elementFromPoint 仍命中 [data-view-anchor]）。 */
.zoom-control .view-anchor-delete {
  position: absolute;
  top: -4px;
  right: -4px;
  width: 12px;
  height: 12px;
  padding: 0;
  border: none;
  border-radius: 3px;
  background: transparent;
  color: var(--u6-flag, #b0332b);
  font-size: 10px;
  line-height: 12px;
  text-align: center;
  opacity: 0;
  pointer-events: none;
  transition: opacity .12s ease, background .12s ease;
}
.zoom-control .view-anchor-item:hover .view-anchor-delete,
.zoom-control .view-anchor-item:focus-within .view-anchor-delete {
  opacity: 1;
  pointer-events: auto;
}
.zoom-control .view-anchor-delete:hover {
  background: color-mix(in srgb, var(--u6-flag, #b0332b) 12%, transparent);
}

.canvas-card .card-head { cursor: grab; user-select: none; }
.canvas-card .card-head:active { cursor: grabbing; }
.canvas-card.connect-source { box-shadow: 0 0 0 5px rgba(213, 171, 64, .22); }
/* CANVAS-CONNECTIONS-P0 交付A：拖线目标高亮（outline 不占布局不挪卡；与 connect-source 金环区分） */
.canvas-card.connect-target { outline: 2px dashed var(--u6-pick-deep, #5a7a68); outline-offset: 4px; box-shadow: 0 0 0 5px rgba(90, 122, 104, .26); }
.canvas-toolbar button.active { background: var(--u6-dark, #536159); color: var(--u6-gold, #f4cd70); }
.redo-icon { display: grid; transform: scaleX(-1); }

.marquee-box {
  position: absolute;
  z-index: 14;
  border: 1px solid var(--u6-pick-deep, #567765);
  background: color-mix(in srgb, var(--u6-pick, #477159) 11%, transparent);
  pointer-events: none;
}

.connections { pointer-events: none; }
/* ---- R5B-CHROME v2 · Phase1 纯 CSS 腿（2026-09-21）：四词词汇=静置(--edge-idle 灰实线)/执行(--edge-exec
   流动虚线)/聚焦(--edge-focus=accent-ui)/完成(--edge-done 提亮沉降)。执行/完成=Phase2 钩位（催单纪律=纯注释，
   规则体见下方注释块，候 ck R7 关单后由仲裁并入 JS 挂类腿时一起转正）。
   类型零视觉编码：.manual/.derived 与旧态类 conn-dashed/gray/solid 一律静置化（DOM 数据语义保留，JS 不动）；
   旧三态色相 #c19c3b/#71877a/#d26950 与 hermes 赤陶执行线 #C0512F 退役。
   特异度钉（RED 基线 log-r5bp1-red2-r5bp1red2.log 实测坐实）：uiopt-r1.css 挂于本文件之后且含同名规则，
   同特异度后者优先=现网 manual 实为 r1 accent-ui（登记注释所称黄系纸面谬误）→ 本块规则一律 svg. 前缀升
   (0,1,2)/(0,2,2) 落地；selected-edge 置块末=同特异度后位胜（聚焦恒压其余态）。 ---- */
svg.connections path { pointer-events: stroke; cursor: pointer; fill: none; stroke: var(--edge-idle); stroke-width: 2.2; }
svg.connections path.manual, svg.connections path.derived,
svg.connections path.conn-dashed, svg.connections path.conn-gray, svg.connections path.conn-solid { stroke: var(--edge-idle); stroke-dasharray: none; }
/* CANVAS-CONNECTIONS-P0 交付A：透明宽描边=命中区（基线 2.2px 难点击；pointer-events:stroke 对透明描边仍生效）。
   edge-preview=拖线预览，不吃指针事件（落点判定走 elementFromPoint 的卡片命中，不被预览线挡） */
.connections path.edge-hit { fill: none; stroke: transparent; stroke-width: 24; }
.connections path.edge-preview { fill: none; stroke: var(--u6-ink-soft, #8fa193); stroke-width: 2.4; stroke-dasharray: 6 6; pointer-events: none; }
/* ---- R5B-P1 std 底锚四词（原 4FEAT F4 :root @361 整替；hermes 覆盖=uiopt-r6-theme.css 同名件）。
   --edge-exec/--edge-focus 以 var 引用主题 token，use-site 解算=自动随主题（蒋哥默认裁①「随主题」的形制
   实现，零额外 hermes 行；若改判恒定黄=此行 var() 换 #F2E93B 字面一行）。
   旧名 --edge-dashed/--edge-gray/--edge-solid 退役（其值 #c19c3b/#8f908a/#71877a 见备份 .pre-r5bp1）。 ---- */
:root { --edge-idle: #8f908a; --edge-exec: var(--accent-marker, #F2E93B); --edge-focus: var(--accent-ui, #6E56CF); --edge-done: color-mix(in srgb, var(--edge-idle) 60%, #fff); }
/* conn-handle 边框=静置灰钉：r1.css 后挂 .canvas-card .conn-handle{border-color:var(--ink-3)} (0,2,0)
   压本文件 :376 同特异度规则（RED 实测 std 柄边=#A8A8A8 非 --edge-gray）→ 双类升至 (0,3,0) 覆写。 */
.canvas-card .conn-handle.conn-handle { border-color: var(--edge-idle); }
/* ==== Phase2 钩位（纯注释候并入，催单 2026-09-21 纪律）——JS 挂类词汇表：
   执行中=挂 .conn-exec（排队段不挂=仅 pill 独表）；完成瞬时=挂 .conn-done（动画毕自除，不入 connState 持久）；
   活跃动画边 >24 时 svg 挂 .degraded（JS 计数）。并入时解除以下注释块，并将探针 INFO 腿升级为 chk：
   svg.connections path.conn-exec { stroke: var(--edge-exec); stroke-dasharray: 8 6; animation: u6-dash-flow .8s linear infinite; }
   svg.connections path.conn-done { stroke: var(--edge-done); transition: stroke .45s ease-out; }
   svg.connections.degraded path.conn-exec { animation: none; }
   @keyframes u6-dash-flow { to { stroke-dashoffset: -14; } }
   @media (prefers-reduced-motion: reduce) { svg.connections path.conn-exec { animation: none; } } ==== */
svg.connections path.selected-edge {
  stroke: var(--edge-focus);
  stroke-width: 4;
  stroke-dasharray: none;
  filter: drop-shadow(0 0 4px color-mix(in srgb, var(--edge-focus) 35%, transparent));
}
/* ---- 4FEAT F3：生成器介质卡（UI-only）+ F2 菜单键盘高亮 ---- */
.generator-body { padding: 10px 14px 12px; display: flex; flex-direction: column; gap: 6px; }
.generator-body > label { font-size: 9px; color: var(--u6-ink-soft, #696b65); font-weight: 650; }
.generator-body textarea { width: 100%; height: 52px; border: 1px solid var(--u6-line, #d7d5ce); border-radius: 7px; background: var(--surface); padding: 6px 8px; font-size: 10px; resize: none; }
.generator-body select { width: 100%; border: 1px solid var(--u6-line, #d7d5ce); border-radius: 6px; background: var(--u6-paper, #f7f6f2); font-size: 10px; padding: 4px 6px; }
.gen-reference { font-size: 9px; color: var(--u6-ink-soft, #5c6d60); background: var(--u6-paper, #eef0ea); border-radius: 6px; padding: 4px 7px; }
.generator-body [data-gen-exec] { width: 100%; border: 0; background: var(--u6-dark, #2d4539); color: white; border-radius: 7px; padding: 7px; font-size: 10px; cursor: pointer; }
.gen-status { font-size: 8px; color: var(--u6-ink-soft, #92938d); }
.context-menu button.menu-active { background: var(--u6-paper, #e7e8e1); outline: 1px solid var(--u6-line, #a8aaa2); }
/* REV-C plus 连接柄：单柄就近边显隐（.on 由 pointermove 择边切换） */
.canvas-card .conn-handle { position: absolute; display: none; width: 18px; height: 18px; align-items: center; justify-content: center; border-radius: 50%; background: var(--u6-paper, #f4f4ee); border: 1px solid var(--edge-idle); color: var(--u6-ink, #3a3b36); font-size: 14px; line-height: 1; z-index: 9; cursor: crosshair; touch-action: none; user-select: none; box-shadow: 0 1px 4px rgba(0, 0, 0, .22); }
.canvas-card .conn-handle.on { display: flex; }
.canvas-card:hover .conn-handle, .canvas-card:focus .conn-handle, .canvas-card:focus-within .conn-handle { display: flex; } /* REV5：悬停/聚焦兜底——保持「只显最近点」前提下至少可见（修「一个点都不显示」） */
.canvas-card .conn-handle[data-side="top"] { left: 50%; top: 0; transform: translate(-50%, -50%); }
.canvas-card .conn-handle[data-side="right"] { left: 100%; top: 50%; transform: translate(-50%, -50%); }
.canvas-card .conn-handle[data-side="bottom"] { left: 50%; top: 100%; transform: translate(-50%, -50%); }
.canvas-card .conn-handle[data-side="left"] { left: 0; top: 50%; transform: translate(-50%, -50%); }
/* REV-E 生成器模式页签 + 供应商行 */
.gen-mode-tabs { display: flex; gap: 4px; }
.gen-mode-tabs button { flex: 1; border: 1px solid var(--u6-line, #d7d5ce); background: var(--u6-paper, #f7f6f2); border-radius: 6px; font-size: 9px; padding: 4px 0; cursor: pointer; color: var(--u6-ink, #5b5d57); }
.gen-mode-tabs button.on { background: var(--u6-dark, #2d4539); border-color: var(--u6-line, #2d4539); color: #fff; font-weight: 650; }
.gen-provider { font-size: 8px; color: var(--u6-ink-soft, #696b65); }
/* REV-F 边悬停预览 + 中点断开 × + 参考挂接回显 */
.edge-hover-tip { position: fixed; z-index: 119; background: var(--u6-dark, #2d3531); color: #eef0ea; font-size: 9px; padding: 4px 8px; border-radius: 6px; pointer-events: none; white-space: nowrap; }
.edge-break-btn { position: fixed; z-index: 120; width: 18px; height: 18px; border-radius: 50%; border: 1px solid var(--u6-flag, #a8433a); background: var(--u6-paper, #fbfaf7); color: var(--u6-flag, #a8433a); font-size: 12px; line-height: 1; cursor: pointer; display: grid; place-items: center; padding: 0; }
.card-ref-chip { position: absolute; left: 8px; bottom: 6px; max-width: calc(100% - 16px); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; background: var(--u6-paper, #e8efe9); color: var(--u6-pick-deep, #315f4d); font-size: 8px; padding: 3px 7px; border-radius: 999px; z-index: 5; }

/* 图片编辑采用 1.0 PPT 式右侧工作面板，底层画布与左侧素材保持可见。 */
.editor-layer { pointer-events: none; }
.editor-backdrop { display: none; }
.editor-window {
  inset: 0 0 0 auto;
  width: 62vw;
  min-width: 800px;
  max-width: 1180px;
  height: 100%;
  border-left: 1px solid var(--u6-line, #c9c8c0);
  border-radius: 14px 0 0 14px;
  pointer-events: auto;
  animation: editor-slide-in .22s ease-out;
}

.editor-collapse {
  position: absolute;
  z-index: 5;
  left: -24px;
  top: 50%;
  width: 25px;
  height: 54px;
  border: 1px solid var(--u6-line, #cac9c1);
  border-right: 0;
  border-radius: 9px 0 0 9px;
  background: var(--u6-paper, #faf9f6);
  color: var(--u6-ink-soft, #777a73);
  cursor: pointer;
  box-shadow: -5px 4px 14px rgba(34, 39, 35, .08);
}

@keyframes editor-slide-in {
  from { transform: translateX(100%); opacity: .72; }
  to { transform: translateX(0); opacity: 1; }
}

@media (max-width: 1280px) {
  .editor-window { width: 68vw; min-width: 760px; }
}

.editor-drawer {
  width: 300px;
  display: flex;
  flex-direction: column;
  padding: 0 12px;
}

.drawer-tabs button { padding-inline: 7px; }
.drawer-materials { min-height: 0; flex: 1; display: flex; flex-direction: column; }
.drawer-context { padding: 16px 8px 2px; }
.drawer-context strong { font-size: 10px; }
.drawer-materials .material-list { flex: 1; padding: 0; }
.drawer-materials .material-item { grid-template-columns: 58px 1fr; }
.drawer-note { margin: auto 6px 14px; color: var(--u6-ink-soft, #979891); font-size: 8px; line-height: 1.5; }

@media (max-width: 1280px) {
  .editor-drawer { width: 260px; }
}

/* ============ R7：项目列表增强 ============ */
.project-toolbar {
  max-width: 1380px;
  margin: 56px auto 22px;
  display: flex;
  align-items: center;
  gap: 18px;
}

.project-search {
  height: 34px;
  width: 260px;
  border: 1px solid var(--u6-line, #deddd5);
  background: var(--u6-paper, #f1f0eb);
  border-radius: 8px;
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 0 12px;
  color: var(--u6-ink-soft, #a0a19b);
  font-size: 11px;
}

.project-search input {
  border: 0;
  outline: 0;
  background: transparent;
  color: var(--u6-ink, #555852);
  font-size: 11px;
  flex: 1;
  min-width: 0;
}

.project-search input::placeholder { color: var(--u6-ink-soft, #a0a19b); }

.project-filters { margin: 0; }
.project-filters button { margin-right: 0; }

.project-card {
  height: auto;
  min-height: 244px;
  display: flex;
  flex-direction: column;
}

.project-menu {
  position: absolute;
  right: 14px;
  top: 14px;
  border: 0;
  background: transparent;
  color: var(--u6-ink-soft, #9a9b94);
  letter-spacing: 1px;
  font-size: 10px;
  padding: 4px 6px;
  border-radius: 6px;
  cursor: pointer;
}

.project-menu:hover { background: var(--u6-paper, #eeece5); }

.project-menu-pop {
  position: absolute;
  right: 14px;
  top: 36px;
  background: var(--surface);
  border: 1px solid var(--u6-line, #dddcd5);
  border-radius: 10px;
  box-shadow: var(--sh-lift);
  z-index: 6;
  padding: 5px;
  min-width: 132px;
  display: flex;
  flex-direction: column;
}

.project-menu-pop button {
  border: 0;
  background: transparent;
  text-align: left;
  padding: 8px 10px;
  font-size: 10px;
  border-radius: 6px;
  color: var(--u6-ink, #4f514d);
  cursor: pointer;
}

.project-menu-pop button:hover { background: var(--u6-paper, #f0efe9); }
.project-menu-pop button:disabled { color: var(--u6-ink-mute, #b9bab3); cursor: default; }

.project-avatars {
  display: flex;
  margin-top: 12px;
}

.project-avatars span {
  width: 22px;
  height: 22px;
  border-radius: 50%;
  background: var(--u6-wash, #d9d2c5);
  border: 2px solid var(--u6-line, #faf9f6);
  display: grid;
  place-items: center;
  font-size: 8px;
  margin-left: -6px;
}

.project-avatars span:first-child { margin-left: 0; }

.project-stats {
  display: flex;
  gap: 8px;
  margin-top: 10px;
  font-size: 9px;
  color: var(--u6-ink-soft, #8a8c85);
}

.project-stats span {
  padding: 3px 6px;
  background: var(--u6-paper, #eeeee8);
  border-radius: 5px;
}

.project-pending {
  position: absolute;
  right: 14px;
  bottom: 14px;
  background: var(--u6-gold, #f4e7d0);
  color: var(--u6-gold, #8a6a1f);
  font-size: 8px;
  padding: 4px 8px;
  border-radius: 999px;
}

.project-card.featured .project-stats span { background: var(--u6-dark, #34433d); color: #ced7d2; }
.project-card.featured .project-pending { background: var(--u6-dark, #3a4433); color: var(--u6-gold, #f1c966); }
.project-card.featured .project-avatars span { border-color: var(--u6-line, #33433c); }

.project-card.archived { opacity: .72; }
.project-card.archived .project-symbol { color: #8a8c85; }

.empty-projects {
  padding: 40px;
  color: var(--u6-ink-soft, #9a9b94);
  font-size: 12px;
  grid-column: 1 / -1;
  text-align: center;
}

/* 新建项目（本地模拟） */
.modal-backdrop {
  position: fixed;
  inset: 0;
  background: rgba(32, 35, 32, .4);
  backdrop-filter: blur(2px);
  z-index: 119;
}

.new-project-modal {
  position: fixed;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  width: 440px;
  background: var(--u6-paper, #faf9f6);
  border: 1px solid var(--u6-line, #d9d8d1);
  border-radius: 16px;
  padding: 22px;
  z-index: 120;
  box-shadow: var(--sh-pop);
}

.new-project-modal .modal-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 16px;
}

.new-project-modal .modal-head strong { font-size: 15px; }

.new-project-modal label {
  display: block;
  font-size: 10px;
  color: var(--u6-ink-soft, #6d706a);
  margin-bottom: 12px;
}

.new-project-modal input,
.new-project-modal select {
  width: 100%;
  height: 34px;
  border: 1px solid var(--u6-line, #d8d7d0);
  background: var(--surface);
  border-radius: 8px;
  padding: 0 10px;
  font-size: 11px;
  margin-top: 6px;
  outline: 0;
}

.new-project-modal .modal-row { display: flex; gap: 10px; }
.new-project-modal .modal-row label { flex: 1; }
.new-project-modal .modal-note { font-size: 9px; color: var(--u6-ink-soft, #969791); margin: 4px 0 16px; }
.new-project-modal .primary-button { width: 100%; justify-content: center; font-size: 11px; }

/* ============ W1-A：文件夹拖入建项（仅登记元数据） ============ */
.folder-drop-zone {
  margin: 18px 0 6px;
  border: 1px dashed var(--u6-line, #c4c6bb);
  border-radius: 12px;
  padding: 14px 18px;
  display: flex;
  align-items: center;
  gap: 10px;
  color: var(--u6-ink-soft, #7c7f78);
  font-size: 11px;
  background: var(--u6-paper, #f6f5ef);
  cursor: default;
}

.folder-drop-zone svg { color: var(--u6-pick-deep, #315f4d); flex: none; }
.folder-drop-zone em { margin-left: auto; font-style: normal; font-size: 9px; color: var(--u6-ink-soft, #a0a19b); }

.folder-drop-overlay {
  position: fixed;
  inset: 0;
  z-index: 119;
  background: color-mix(in srgb, var(--u6-pick, #315f4d) 8%, transparent);
  backdrop-filter: blur(1px);
  display: grid;
  place-items: center;
  pointer-events: none;
}

.folder-drop-overlay[hidden] { display: none; }

.folder-drop-overlay > div {
  background: var(--surface);
  border: 1.5px dashed var(--u6-pick-deep, #315f4d);
  border-radius: 16px;
  padding: 26px 42px;
  text-align: center;
  box-shadow: var(--sh-pop);
}

.folder-drop-overlay svg { width: 34px; height: 34px; color: var(--u6-pick-deep, #315f4d); }
.folder-drop-overlay strong { display: block; margin: 10px 0 4px; font-size: 15px; color: var(--u6-ink, #2b2d29); }
.folder-drop-overlay small { color: var(--u6-ink-soft, #969791); font-size: 11px; }

.folder-import-modal {
  position: fixed;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  width: 480px;
  background: var(--u6-paper, #faf9f6);
  border: 1px solid var(--u6-line, #d9d8d1);
  border-radius: 16px;
  padding: 22px;
  z-index: 120;
  box-shadow: var(--sh-pop);
}

.folder-import-modal .modal-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 16px;
}

.folder-import-modal .modal-head strong { font-size: 15px; }
.folder-import-modal label { display: block; font-size: 10px; color: var(--u6-ink-soft, #6d706a); margin-bottom: 12px; }

.folder-import-modal input,
.folder-import-modal select {
  width: 100%;
  height: 34px;
  border: 1px solid var(--u6-line, #d8d7d0);
  background: var(--surface);
  border-radius: 8px;
  padding: 0 10px;
  font-size: 11px;
  margin-top: 6px;
  outline: 0;
}

.folder-import-modal .modal-row { display: flex; gap: 10px; }
.folder-import-modal .modal-row label { flex: 1; }

.import-stats {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px;
  margin: 4px 0 8px;
}

.import-info {
  background: var(--u6-paper, #f1f0ea);
  border-radius: 8px;
  padding: 8px 10px;
}

.import-info span { display: block; font-size: 9px; color: var(--u6-ink-soft, #8a8c85); margin-bottom: 3px; }
.import-info strong { font-size: 11px; color: var(--u6-ink, #3c3e3a); font-weight: 600; word-break: break-all; }

.import-scan-status { font-size: 10px; color: var(--u6-pick-deep, #315f4d); margin: 0 0 6px; }

.import-anomalies {
  margin: 0 0 10px;
  padding: 0;
  list-style: none;
  font-size: 10px;
  color: var(--u6-ink-soft, #a05a1f);
}

.import-anomalies li { margin: 2px 0; }
.import-anomalies.none { color: var(--u6-ink-soft, #969791); }

.folder-import-modal .modal-note { font-size: 9px; color: var(--u6-ink-soft, #969791); margin: 4px 0 14px; }
.folder-import-modal .primary-button { width: 100%; justify-content: center; font-size: 11px; }

.ingestion-badge {
  position: absolute;
  left: 14px;
  bottom: 14px;
  background: var(--u6-paper, #e8efe9);
  color: var(--u6-pick-deep, #315f4d);
  font-size: 8px;
  padding: 4px 8px;
  border-radius: 999px;
  max-width: calc(100% - 150px);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.project-card.featured .ingestion-badge { background: var(--u6-dark, #33443c); color: var(--u6-ink-mute, #bcd4c5); }

.ingestion-note {
  padding: 8px 12px;
  font-size: 9px;
  color: var(--u6-ink-soft, #6d706a);
  background: var(--u6-paper, #f1f0ea);
  border-radius: 8px;
  margin: 4px 0 8px;
  display: flex;
  align-items: center;
  gap: 6px;
}

.ingestion-note::before { content: 'ⓘ'; color: var(--u6-pick-deep, #315f4d); }

/* ============ W1-I：右上人员入口 ============
   默认只显示当前用户纯头像（无常驻姓名 / 在线文字 / 箭头 / 胶囊）；悬停主头像时当前项目其他参与者头像
   从右向左依次展开（在线保持正常，离线灰度/降饱和仍可辨）；点击主头像仍向下打开 W1-F 人员与排期面板。 */
.personnel-entry { position: relative; display: flex; align-items: center; margin-left: 14px; }
.personnel-main-avatar { width: 36px; height: 36px; border-radius: 50%; color: #fff; display: grid; place-items: center; font-size: 12px; border: 2px solid var(--u6-line, #faf9f6); box-shadow: var(--sh-rest); cursor: pointer; transition: transform .18s ease, box-shadow .18s ease; }
.personnel-main-avatar:hover { transform: translateY(-1px); box-shadow: var(--sh-lift); }
.personnel-presence-preview { position: absolute; top: 50px; right: 0; z-index: 31; width: 208px; padding: 10px; display: grid; grid-template-columns: repeat(6, 28px); gap: 5px 4px; border: 1px solid var(--u6-line, #d4d3cc); border-radius: 6px; background: var(--u6-paper, #faf9f6); box-shadow: var(--sh-lift); opacity: 0; visibility: hidden; transform: translateY(-4px); pointer-events: none; transition: opacity .14s ease, transform .14s ease, visibility .14s; }
.personnel-presence-preview::before { content: ""; position: absolute; left: 0; right: 0; top: -14px; height: 14px; }
.personnel-entry:hover .personnel-presence-preview { opacity: 1; visibility: visible; transform: translateY(0); pointer-events: auto; }
.app-frame:has([data-personnel-panel]) .personnel-presence-preview { display: none; }
.personnel-presence-avatar { position: relative; width: 28px; height: 28px; display: grid; place-items: center; border: 2px solid var(--u6-line, #faf9f6); border-radius: 50%; color: #fff; font-size: 9px; box-shadow: var(--sh-rest); }
.personnel-presence-avatar.off { filter: grayscale(1); opacity: .42; }
.personnel-presence-avatar i { position: absolute; right: -1px; bottom: -1px; width: 7px; height: 7px; border: 1.5px solid var(--u6-line, #faf9f6); border-radius: 50%; background: var(--u6-wash, #aeb2ac); }
.personnel-presence-avatar.on i { background: var(--u6-pick, #4aa265); }
.personnel-hover-row { display: flex; align-items: center; margin-right: 2px; opacity: 0; transform: translateX(10px); pointer-events: none; transition: opacity .2s ease, transform .2s ease; }
.personnel-hover-avatar { width: 30px; height: 30px; border-radius: 50%; color: #fff; display: grid; place-items: center; font-size: 10px; border: 2px solid var(--u6-line, #faf9f6); box-shadow: var(--sh-rest); margin-left: -7px; opacity: 0; transform: translateX(14px); transition: opacity .2s ease, transform .2s ease; }
.personnel-hover-avatar:first-child { margin-left: 0; }
.personnel-hover-avatar.off { filter: grayscale(1) opacity(.5); }
.personnel-entry:hover .personnel-hover-row { opacity: 1; transform: translateX(0); pointer-events: auto; }
.personnel-entry:hover .personnel-hover-avatar { opacity: 1; transform: translateX(0); }
.personnel-entry:hover .personnel-hover-avatar:nth-child(1) { transition-delay: .02s; }
.personnel-entry:hover .personnel-hover-avatar:nth-child(2) { transition-delay: .07s; }
.personnel-entry:hover .personnel-hover-avatar:nth-child(3) { transition-delay: .12s; }
.personnel-entry:hover .personnel-hover-avatar:nth-child(4) { transition-delay: .17s; }

.personnel-panel { position: fixed; top: 64px; right: 16px; z-index: 13; width: 640px; max-width: calc(100vw - 32px); background: var(--u6-paper, #f7f6f2); border: 1px solid var(--u6-line, #d4d3cc); border-radius: 8px; box-shadow: var(--sh-lift); display: flex; flex-direction: column; overflow: hidden; }
.personnel-panel.expanded { width: 720px; }
.personnel-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 10px 14px; border-bottom: 1px solid var(--u6-line, #dfded7); background: var(--u6-paper, #fbfaf7); }
.personnel-title strong { display: block; font-size: 12px; font-weight: 620; }
.personnel-title small { display: block; margin-top: 3px; color: var(--u6-ink-soft, #999b94); font-size: 8px; }
.personnel-controls { display: flex; align-items: center; gap: 8px; }
.personnel-seg { display: flex; border: 1px solid var(--u6-line, #dcdbd4); border-radius: 7px; overflow: hidden; background: var(--u6-paper, #f2f1ec); }
.personnel-seg button { border: 0; background: transparent; padding: 6px 10px; font-size: 10px; color: var(--u6-ink-soft, #75776f); cursor: pointer; }
.personnel-seg button.active { background: var(--u6-dark, #2c3933); color: #fff; }
.personnel-expand { border: 1px solid var(--u6-line, #d4d5ce); border-radius: 7px; background: var(--surface); color: var(--u6-ink-soft, #56665c); padding: 6px 10px; font-size: 10px; cursor: pointer; }
.personnel-close { border: 0; background: transparent; color: var(--u6-ink-soft, #7a7d76); width: 28px; height: 28px; border-radius: 7px; display: grid; place-items: center; cursor: pointer; }
.personnel-close:hover { background: var(--u6-paper, #ebeae5); }

.personnel-body { overflow: auto; padding: 10px 14px 6px; max-height: 340px; }
.personnel-panel.expanded .personnel-body { max-height: 460px; }
.personnel-foot { padding: 8px 14px; border-top: 1px solid var(--u6-line, #e0dfd8); background: var(--u6-paper, #faf9f6); display: flex; gap: 14px; align-items: center; color: var(--u6-ink-soft, #8a8c85); font-size: 9px; }
.personnel-foot span:first-child { color: var(--u6-pick, #3d6255); font-weight: 620; white-space: nowrap; }

.p5-table { width: 100%; }
.p5-table-head, .p5-row { display: grid; grid-template-columns: 230px 1fr; gap: 10px; align-items: center; }
.p5-table-head { padding-bottom: 6px; margin-bottom: 4px; border-bottom: 1px solid var(--u6-line, #e3e2dc); }
.p5-table-label { font-size: 9px; color: var(--u6-ink-soft, #8a8c85); }
.p5-table-grid { display: grid; grid-template-columns: repeat(28, 1fr); gap: 1px; align-items: stretch; }
.p5-day { font-size: 8px; color: var(--u6-ink-soft, #999b94); text-align: center; }
.p5-day.wknd { color: var(--u6-ink-mute, #c6c7c0); }
.p5-row { padding: 4px 0; border-bottom: 1px solid var(--u6-line, #efeee9); cursor: pointer; border-radius: 4px; }
.p5-row:hover { background: var(--u6-paper, #f1f0eb); }
.p5-row.focus { background: var(--u6-paper, #eef3ee); outline: 1px solid var(--u6-pick, #7a9a85); outline-offset: -1px; }
.p5-row-label { display: flex; align-items: center; gap: 6px; min-width: 0; }
.p5-row-label strong { font-size: 10px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.p5-row-label small { font-size: 8px; color: var(--u6-ink-soft, #999b94); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; display: inline-flex; gap: 4px; align-items: center; }
.p5-principal { width: 18px; height: 18px; border-radius: 50%; color: #fff; display: grid; place-items: center; font-size: 7px; flex: none; }
.p5-staff-dot { width: 13px; height: 13px; border-radius: 50%; color: #fff; display: inline-grid; place-items: center; font-size: 6px; font-style: normal; }
.p5-person-row .p5-row-label { gap: 7px; }
.p5-person-avatar { width: 22px; height: 22px; border-radius: 50%; color: #fff; display: grid; place-items: center; font-size: 8px; flex: none; }
.p5-person-row .p5-row-label strong { font-size: 11px; }
.p5-project-band { display: flex; align-items: center; gap: 7px; padding: 7px 0 3px; color: var(--u6-ink, #4c514d); }
.p5-project-band strong { font-size: 10px; }
.p5-project-band em { font-style: normal; font-size: 8px; color: var(--u6-ink-soft, #999b94); }
.p5-band-dot { width: 9px; height: 9px; border-radius: 3px; }
.p5-cell { height: 15px; border-radius: 2px; background: var(--u6-paper, #f0efe9); }
.p5-cell.wknd { background: var(--u6-paper, #e7e6e0); }
.p5-cell.dim { opacity: .28; }
.p5-cell.conflict { outline: 1.5px solid var(--u6-flag, #c2554e); outline-offset: -1px; }
.p5-cell.focused { outline: 1.5px solid var(--u6-pick-deep, #2c6b4f); outline-offset: -1px; }
.p5-empty { color: var(--u6-ink-soft, #999b94); font-size: 10px; padding: 14px; }

.personnel-legend { display: flex; gap: 14px; padding: 6px 14px; border-top: 1px dashed var(--u6-line, #e0dfd8); color: var(--u6-ink-soft, #8a8c85); font-size: 9px; }
.personnel-legend span { display: inline-flex; align-items: center; gap: 5px; }
.personnel-legend .lg { width: 12px; height: 12px; border-radius: 2px; display: inline-block; }
.personnel-legend .lg.on { background: var(--u6-pick, #4a6f5c); }
.personnel-legend .lg.dim { background: var(--u6-gold, #8a6f4d); opacity: .35; }
.personnel-legend .lg.conflict { background: var(--u6-flag, #c2554e); }

@media (max-width: 1100px) {
  .personnel-panel, .personnel-panel.expanded { width: 560px; }
  .p5-table-head, .p5-row { grid-template-columns: 170px 1fr; }
}

/* ============ W1-J：头像向下 → P5 双栏向左 → 全局向下 ============
   四层展开：L0 纯头像（页眉）→ L1 人员列表（向下）→ L2 双栏工作区（向左，
   恒定 [左内容区 | 3px 分隔+方向按钮 | 右人员列]）→ 范围向下到跨项目全局。
   面板内所有操作均 targeted update，不重建画布 / 编辑器 / 文件树 / 右下悬浮对象。 */
.w1j-panel { position: fixed; top: 64px; right: 16px; z-index: 13; background: var(--u6-paper, #f7f6f2); border: 1px solid var(--u6-line, #d4d3cc); border-radius: 8px; box-shadow: var(--sh-lift); display: flex; flex-direction: column; overflow: hidden; }

/* ---- L1 人员列表（向下展开） ---- */
.w1j-list { width: 322px; }
.w1j-list-head { display: flex; align-items: center; gap: 10px; padding: 12px 14px; border-bottom: 1px solid var(--u6-line, #dfded7); background: var(--u6-paper, #fbfaf7); }
.w1j-me-avatar { width: 36px; height: 36px; border-radius: 50%; color: #fff; display: grid; place-items: center; font-size: 12px; flex: none; box-shadow: var(--sh-rest); }
.w1j-me-text { flex: 1; min-width: 0; }
.w1j-me-text strong { display: block; font-size: 12px; font-weight: 620; }
.w1j-me-text small { display: block; margin-top: 2px; color: var(--u6-ink-soft, #999b94); font-size: 9px; }
.w1j-close { border: 0; background: transparent; color: var(--u6-ink-soft, #7a7d76); width: 28px; height: 28px; border-radius: 7px; display: grid; place-items: center; cursor: pointer; }
.w1j-close:hover { background: var(--u6-paper, #ebeae5); }
.w1j-list-context { padding: 8px 14px 2px; color: var(--u6-ink-soft, #8a8c85); font-size: 10px; }
.w1j-list-context strong { color: var(--u6-ink, #4c514d); font-weight: 620; }
.w1j-list-body { padding: 8px 10px; overflow: auto; max-height: 356px; display: flex; flex-direction: column; gap: 4px; }
.w1j-list-foot { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 8px 14px; border-top: 1px solid var(--u6-line, #e0dfd8); background: var(--u6-paper, #faf9f6); }
.w1j-expand { display: inline-flex; align-items: center; gap: 6px; border: 1px solid var(--u6-line, #d4d5ce); border-radius: 7px; background: var(--surface); color: var(--u6-ink, #2c3933); padding: 7px 11px; font-size: 10px; font-weight: 600; cursor: pointer; }
.w1j-expand:hover { background: var(--u6-paper, #f1f5f2); border-color: var(--u6-line, #b9c5bc); }
.w1j-list-hint { color: var(--u6-ink-soft, #a2a49d); font-size: 8px; }

/* ---- 人员行（L1 / 右栏共用，可拖拽） ---- */
.w1j-person { display: flex; align-items: center; gap: 9px; padding: 7px 8px; border-radius: 7px; cursor: grab; background: var(--surface); border: 1px solid var(--u6-line, #e7e6e0); }
.w1j-person:hover { background: var(--u6-paper, #f5f5f0); border-color: var(--u6-line, #d0d1ca); }
.w1j-person.off { opacity: .55; }
.w1j-person-avatar { width: 26px; height: 26px; border-radius: 50%; color: #fff; display: grid; place-items: center; font-size: 9px; flex: none; }
.w1j-person-main { flex: 1; min-width: 0; }
.w1j-person-main strong { display: block; font-size: 11px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.w1j-person-main small { display: block; margin-top: 1px; font-size: 8px; color: var(--u6-ink-soft, #999b94); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.w1j-person-state { width: 7px; height: 7px; border-radius: 50%; background: var(--u6-paper, #cfd0ca); flex: none; }
.w1j-person-state.on { background: var(--u6-pick, #4a9d62); box-shadow: 0 0 0 2px rgba(74,157,98,.18); }
.w1j-person-load { font-size: 9px; color: var(--u6-ink-soft, #56665c); font-weight: 620; background: var(--u6-paper, #eef1ec); border-radius: 10px; padding: 2px 7px; flex: none; }

/* ---- L2 双栏工作区 ---- */
.w1j-workspace { width: min(1080px, calc(100vw - 32px)); }
.w1j-workspace.expanded { width: min(1200px, calc(100vw - 32px)); }
.w1j-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 10px 14px; border-bottom: 1px solid var(--u6-line, #dfded7); background: var(--u6-paper, #fbfaf7); }
.w1j-title strong { display: block; font-size: 12px; font-weight: 620; }
.w1j-title small { display: block; margin-top: 2px; color: var(--u6-ink-soft, #999b94); font-size: 8px; }
.w1j-controls { display: flex; align-items: center; gap: 8px; }
.w1j-seg { display: flex; border: 1px solid var(--u6-line, #dcdbd4); border-radius: 7px; overflow: hidden; background: var(--u6-paper, #f2f1ec); }
.w1j-seg button { border: 0; background: transparent; padding: 6px 10px; font-size: 10px; color: var(--u6-ink-soft, #75776f); cursor: pointer; }
.w1j-seg button.active { background: var(--u6-dark, #2c3933); color: #fff; }
.w1j-noperm { font-size: 9px; color: var(--u6-ink-soft, #a2a49d); border: 1px dashed var(--u6-line, #dcdbd4); border-radius: 7px; padding: 5px 9px; }
.w1j-dual { display: flex; align-items: stretch; min-height: 380px; max-height: 480px; }
.w1j-left { flex: 1; min-width: 0; overflow: auto; padding: 10px 12px; }
.w1j-divider { width: 3px; background: var(--u6-paper, #d4d3cc); position: relative; }
.w1j-view-toggle { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 26px; height: 26px; border-radius: 50%; border: 1px solid var(--u6-line, #c4c3bc); background: var(--surface); color: var(--u6-ink, #3c3f3a); display: grid; place-items: center; cursor: pointer; box-shadow: var(--sh-rest); z-index: 2; }
.w1j-view-toggle:hover { background: var(--u6-paper, #f2f5f1); color: var(--u6-ink, #2c3933); }
.w1j-right { width: 250px; flex: none; border-left: 1px solid var(--u6-line, #e0dfd8); background: var(--u6-paper, #faf9f6); display: flex; flex-direction: column; }
.w1j-right-head { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; padding: 9px 12px; border-bottom: 1px solid var(--u6-line, #e3e2dc); }
.w1j-right-head strong { font-size: 11px; font-weight: 620; color: var(--u6-ink, #3a3d38); }
.w1j-right-head small { font-size: 8px; color: var(--u6-ink-soft, #a2a49d); }
.w1j-right-body { flex: 1; overflow: auto; padding: 8px; display: flex; flex-direction: column; gap: 4px; }
.w1j-foot { padding: 8px 14px; border-top: 1px solid var(--u6-line, #e0dfd8); background: var(--u6-paper, #faf9f6); display: flex; gap: 14px; align-items: center; color: var(--u6-ink-soft, #8a8c85); font-size: 9px; }
.w1j-foot span:first-child { color: var(--u6-pick, #3d6255); font-weight: 620; white-space: nowrap; }

/* ---- 左内容区 · 工作甘特 ---- */
.w1j-gantt { width: 100%; }
.w1j-gantt-head, .w1j-gantt-row { display: grid; grid-template-columns: 240px 1fr; gap: 10px; align-items: center; }
.w1j-gantt-head { padding-bottom: 6px; margin-bottom: 4px; border-bottom: 1px solid var(--u6-line, #e3e2dc); }
.w1j-gantt-label { font-size: 9px; color: var(--u6-ink-soft, #8a8c85); }
.w1j-gantt-days { display: grid; grid-template-columns: repeat(28, 1fr); gap: 1px; align-items: stretch; }
.w1j-gantt-row { padding: 5px 0; border-bottom: 1px solid var(--u6-line, #efeee9); border-radius: 4px; cursor: pointer; }
.w1j-gantt-row:hover { background: var(--u6-paper, #f1f0eb); }
.w1j-gantt-row.focus { background: var(--u6-paper, #eef3ee); outline: 1px solid var(--u6-pick, #7a9a85); outline-offset: -1px; }
.w1j-gantt-left { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.w1j-gantt-name { display: flex; align-items: center; gap: 6px; min-width: 0; }
.w1j-gantt-name strong { font-size: 10px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.w1j-gantt-name small { font-size: 8px; color: var(--u6-ink-soft, #999b94); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.w1j-phase-dot { width: 8px; height: 8px; border-radius: 2px; flex: none; }
.w1j-gantt-grid { display: grid; grid-template-columns: repeat(28, 1fr); gap: 1px; align-items: stretch; cursor: pointer; }

/* ---- 分配框 ---- */
.w1j-assign { display: flex; align-items: center; gap: 7px; border: 1px dashed var(--u6-line, #d5d4cd); background: var(--u6-paper, #fbfaf7); border-radius: 6px; padding: 4px 7px; min-height: 26px; transition: border-color .15s ease, background .15s ease; }
.w1j-assign.drop-target { border-color: var(--u6-pick, #4a9d62); background: var(--u6-paper, #eff6f0); border-style: solid; }
.w1j-assign-label { font-size: 8px; color: var(--u6-ink-soft, #a2a49d); flex: none; }
.w1j-assign-chips { display: flex; flex-wrap: wrap; gap: 4px; align-items: center; }
.w1j-assign-chip { width: 20px; height: 20px; border-radius: 50%; background: var(--u6-paper, #e3e6e0); color: var(--u6-ink, #3a3d38); display: grid; place-items: center; font-size: 8px; cursor: pointer; border: 1px solid var(--u6-line, #d0d1ca); }
.w1j-assign-chip.principal { background: var(--u6-dark, #2c3933); color: #fff; border-color: var(--u6-line, #2c3933); box-shadow: 0 0 0 1.5px rgba(44,57,51,.25); }
.w1j-assign-chip:hover { filter: brightness(.93); }
.w1j-assign-empty { font-size: 9px; color: var(--u6-ink-mute, #b0b2ab); }

/* ---- 跨项目项目带 ---- */
.w1j-project-band { display: flex; align-items: center; gap: 7px; padding: 7px 0 3px; color: var(--u6-ink, #4c514d); }
.w1j-project-band strong { font-size: 10px; }
.w1j-project-band em { font-style: normal; font-size: 8px; color: var(--u6-ink-soft, #999b94); }
.w1j-band-dot { width: 9px; height: 9px; border-radius: 3px; }

/* ---- 左内容区 · 人员时间线（右名左格） ---- */
.w1j-timeline { width: 100%; }
.w1j-timeline-head, .w1j-tl-row { display: grid; grid-template-columns: 1fr 92px; gap: 10px; align-items: center; }
.w1j-timeline-head { padding-bottom: 6px; margin-bottom: 4px; border-bottom: 1px solid var(--u6-line, #e3e2dc); }
.w1j-timeline-days { display: grid; grid-template-columns: repeat(28, 1fr); gap: 1px; align-items: stretch; }
.w1j-timeline-name { font-size: 9px; color: var(--u6-ink-soft, #8a8c85); text-align: center; }
.w1j-tl-row { padding: 4px 0; border-bottom: 1px solid var(--u6-line, #efeee9); border-radius: 4px; cursor: pointer; }
.w1j-tl-row:hover { background: var(--u6-paper, #f1f0eb); }
.w1j-tl-row.focus { background: var(--u6-paper, #eef3ee); outline: 1px solid var(--u6-pick, #7a9a85); outline-offset: -1px; }
.w1j-tl-cells { display: grid; grid-template-columns: repeat(28, 1fr); gap: 1px; align-items: stretch; }
.w1j-tl-name { display: flex; align-items: center; gap: 6px; justify-content: flex-end; min-width: 0; }
.w1j-tl-name strong { font-size: 10px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

@media (max-width: 1200px) {
  .w1j-workspace, .w1j-workspace.expanded { width: min(980px, calc(100vw - 32px)); }
  .w1j-gantt-head, .w1j-gantt-row { grid-template-columns: 200px 1fr; }
  .w1j-right { width: 220px; }
}

/* ============ W1-N：回归 v1 P5 的高密度行结构 ============
   工作、时间格、人员为主体；说明退到 title / footer，分配改为同行。 */
.w1j-list { width: 286px; }
.w1j-list-head { min-height: 38px; gap: 8px; padding: 5px 8px; }
.w1j-me-avatar { width: 26px; height: 26px; font-size: 9px; box-shadow: none; }
.w1j-list-body { padding: 4px; max-height: 392px; gap: 2px; }
.w1j-list-foot { padding: 4px; }
.w1j-expand { width: 100%; justify-content: center; border: 0; border-radius: 3px; background: transparent; padding: 5px 8px; font-size: 9px; }

.w1j-person { min-height: 42px; display: grid; grid-template-columns: 1fr 42px; grid-template-rows: 20px 4px; column-gap: 6px; align-items: center; padding: 4px 6px; border-radius: 3px; }
.w1j-person:hover { border-color: var(--u6-line, #9eafa4); }
.w1j-person-main { min-width: 0; display: flex; align-items: center; justify-content: space-between; gap: 4px; }
.w1j-person-main strong { font-size: 10px; }
.w1j-person-count { font-size: 8px; font-weight: 700; color: var(--u6-flag, #b55b53); white-space: nowrap; }
.w1j-person-count i { color: var(--u6-ink-soft, #aaa); font-style: normal; margin: 0 1px; }
.w1j-load-track { height: 3px; background: var(--u6-paper, #ecece7); overflow: hidden; }
.w1j-load-track i { display: block; height: 100%; background: var(--u6-dark, #6e8a79); }
.w1j-person-meta { grid-column: 2; grid-row: 1 / span 2; display: flex; align-items: center; justify-content: flex-end; gap: 5px; font-size: 8px; color: var(--u6-ink-soft, #8d8f89); }
.w1j-person-meta .w1j-person-load { padding: 0; border-radius: 0; background: transparent; color: inherit; font-size: 8px; font-weight: 500; }

.w1j-head { min-height: 38px; padding: 4px 8px; }
.w1j-seg button { padding: 4px 8px; font-size: 9px; }
.w1j-dual { min-height: 430px; max-height: 560px; }
.w1j-left { padding: 6px 8px; }
.w1j-view-toggle { top: 8px; transform: translateX(-50%); width: 18px; height: 18px; padding: 2px; box-shadow: none; }
.w1j-right { width: 254px; }
.w1j-right-head { height: 28px; align-items: center; padding: 3px 6px; }
.w1j-right-body { padding: 4px; display: grid; grid-template-columns: 1fr 1fr; gap: 3px; align-content: start; }
.w1j-foot { min-height: 26px; padding: 3px 8px; gap: 12px; font-size: 8px; }

.w1j-gantt-head, .w1j-gantt-row { grid-template-columns: 220px 1fr; gap: 6px; }
.w1j-gantt-head { min-height: 26px; padding-bottom: 2px; margin-bottom: 1px; }
.w1j-gantt-row { min-height: 34px; padding: 2px 0; border-radius: 2px; }
.w1j-gantt-left { display: grid; grid-template-columns: minmax(0, 1fr) 74px; gap: 4px; align-items: center; }
.w1j-assign { gap: 0; border-color: transparent; background: transparent; border-radius: 3px; padding: 1px 2px; min-height: 24px; }
.w1j-assign-chip { width: 18px; height: 18px; font-size: 7px; }
.w1j-assign-empty { font-size: 8px; }

@media (max-width: 1200px) {
  .w1j-gantt-head, .w1j-gantt-row { grid-template-columns: 190px 1fr; }
  .w1j-gantt-left { grid-template-columns: minmax(0, 1fr) 64px; }
  .w1j-right { width: 220px; }
}

/* W1-Q：固定人员单列贯穿 L1 / 甘特 / 人员半日格；左箭头只控制横向层级，向下箭头只控制范围。 */
.w1j-list { width: 208px; overflow: visible; }
.w1j-list-head { min-height: 32px; padding: 3px 5px 3px 8px; }
.w1j-plain-title { flex: 1; font-size: 11px; font-weight: 600; }
.w1j-list-head > small { color: var(--u6-ink-soft, #92958f); font-size: 8px; }
.w1j-list-body { padding: 3px; gap: 0; }
.w1j-list-foot { display: none; }
.w1j-edge-toggle { position: absolute; left: -22px; top: 9px; width: 22px; height: 28px; padding: 0; border: 1px solid var(--u6-line, #d4d3cc); border-right: 0; border-radius: 5px 0 0 5px; background: var(--u6-paper, #f8f7f3); display: grid; place-items: center; }
.w1j-person { min-height: 42px; height: 42px; grid-template-columns: 1fr 38px; border: 0; border-bottom: 1px solid var(--u6-line, #e5e4de); background: transparent; }
.w1j-person:hover { border-color: var(--u6-line, #d2d8d3); background: var(--u6-paper, #eef1ed); }
.w1j-person:last-child { border-bottom-color: transparent; }
.w1j-person.assigned { background: var(--u6-paper, #e7eee9); box-shadow: inset 2px 0 0 #607e6c; }
.w1j-person.relation-hover { background: var(--u6-paper, #d7e5db); box-shadow: inset 3px 0 0 var(--u6-pick, #466b56); outline: 1px solid var(--u6-line, #7f9d8a); outline-offset: -1px; }
.w1j-gantt-row.relation-hover, .w1j-tl-row.relation-hover { background: var(--u6-paper, #e1ebe4); outline: 1px solid var(--u6-line, #7f9d8a); outline-offset: -1px; }
.w1j-tl-row.relation-hover .p5-cell { filter: saturate(1.18) brightness(.92); box-shadow: inset 0 0 0 1px rgba(70,107,86,.28); }
.w1j-workspace { width: min(970px, calc(100vw - 32px)); }
.w1j-workspace.expanded { width: min(1080px, calc(100vw - 32px)); }
.w1j-head { min-height: 32px; height: 32px; }
.w1j-right { width: 208px; }
.w1j-right-head { height: 26px; padding: 2px 6px; }
.w1j-right-body { padding: 0 3px; display: flex; flex-direction: column; gap: 0; }
.w1j-left, .w1j-right-body { scrollbar-width: none; }
.w1j-left::-webkit-scrollbar, .w1j-right-body::-webkit-scrollbar { display: none; }
.w1j-divider { width: 3px; flex: 0 0 3px; background: var(--u6-paper, #d0d5dd); }
.w1j-shared-scroll { position: absolute; inset: 0; z-index: 2; }
.w1j-shared-scroll > i { position: absolute; inset: 0 0 auto; min-height: 34px; border-radius: 2px; background: var(--u6-dark, #727b75); cursor: ns-resize; touch-action: none; }
.w1j-shared-scroll.inactive > i { opacity: 0; pointer-events: none; }
.w1j-view-toggle { top: 48%; left: 50%; z-index: 3; width: 25px; height: 34px; padding: 0; border: 0; border-radius: 0; transform: translate(-50%, -50%); background: var(--u6-paper, #f7f6f2); box-shadow: none; }
.w1j-view-toggle:hover { background: var(--u6-paper, #f7f6f2); color: var(--u6-ink, #1f3b2d); }
.w1j-view-toggle morph-icon, .w1j-edge-toggle morph-icon, .w1j-scope-down morph-icon { width: 18px; height: 18px; }
.w1j-scope-divider { position: relative; height: 25px; border-top: 1px solid var(--u6-line, #c9ccc8); background: var(--u6-paper, #faf9f6); }
.w1j-scope-down { position: absolute; left: calc(100% - 208px); top: -13px; width: 34px; height: 25px; display: grid; place-items: center; padding: 0; border: 0; border-radius: 0; transform: translateX(-50%); background: var(--u6-paper, #faf9f6); color: var(--u6-ink-soft, #53675b); cursor: pointer; }
.w1j-scope-down:hover { background: var(--u6-paper, #faf9f6); color: var(--u6-ink, #1f3b2d); }
.w1j-gantt-head, .w1j-gantt-row { grid-template-columns: 238px 1fr; }
.w1j-gantt-row { min-height: 42px; height: 42px; }
.w1j-gantt-left { display: block; }
.w1j-gantt-label { display: flex; align-items: center; gap: 5px; }
.w1j-project-lead { color: var(--u6-ink, #49534d); font-size: 9px; font-weight: 600; }
.w1j-gantt-label button, .w1j-task-actions button { width: 18px; height: 18px; display: grid; place-items: center; padding: 0; border: 0; border-radius: 3px; background: transparent; color: var(--u6-ink-soft, #747a75); cursor: pointer; }
.w1j-gantt-label button:hover, .w1j-task-actions button:hover { background: var(--u6-paper, #e5e9e5); color: var(--u6-ink, #34433a); }
.w1j-global-project { width: 100%; min-height: 48px; display: grid; grid-template-columns: 238px 1fr; gap: 6px; align-items: stretch; padding: 0; border: 0; border-bottom: 1px solid var(--u6-line, #dedfd9); background: transparent; color: inherit; text-align: left; cursor: pointer; }
.w1j-global-project:hover { background: var(--u6-paper, #e8eee9); }
.w1j-global-project.relation-hover { background: var(--u6-paper, #dce8df); box-shadow: inset 3px 0 0 var(--u6-pick, #466b56); }
.w1j-global-project.relation-hover .w1j-project-duration { opacity: 1; box-shadow: 0 0 0 1px rgba(70,107,86,.34); }
.w1j-global-project-name { min-width: 0; display: grid; grid-template-columns: 8px minmax(0, 1fr); column-gap: 7px; align-content: center; padding: 5px 0; }
.w1j-global-project-name strong { overflow: hidden; color: var(--u6-ink, #424a45); font-size: 10px; font-weight: 620; text-overflow: ellipsis; white-space: nowrap; }
.w1j-global-project-name small { grid-column: 2; margin-top: 2px; color: var(--u6-ink-soft, #929890); font-size: 8px; }
.w1j-global-project-time { position: relative; min-width: 0; background-image: repeating-linear-gradient(to right, transparent 0, transparent calc(7.142857% - 1px), #e3e4df calc(7.142857% - 1px), #e3e4df 7.142857%); }
.w1j-global-project-time::after { content: ''; position: absolute; inset: 0; pointer-events: none; background: linear-gradient(to right, transparent 0 35.714%, rgba(90,95,90,.035) 35.714% 50%, transparent 50% 85.714%, rgba(90,95,90,.035) 85.714% 100%); }
.w1j-project-duration { position: absolute; top: 15px; height: 18px; min-width: 3px; border-radius: 4px; opacity: .78; }
.w1j-task-actions { display: flex; margin-left: auto; opacity: 0; }
.w1j-gantt-row:hover .w1j-task-actions, .w1j-task-actions:focus-within { opacity: 1; }
.w1j-assign { min-height: 18px; padding: 0 2px; }
.w1j-assign-label { display: inline; }
.w1j-timeline-head, .w1j-tl-row { grid-template-columns: 1fr; gap: 0; }
.w1j-timeline-head { min-height: 26px; margin-bottom: 0; }
.w1j-timeline-head, .w1j-gantt-head { position: sticky; top: 0; z-index: 2; background: var(--u6-paper, #f7f6f2); }
.w1j-tl-row { min-height: 42px; height: 42px; padding: 13px 0; }
.w1j-tl-name { display: none; }
.w1j-workspace:has(.w1j-timeline) .w1j-left { padding-top: 0; padding-bottom: 0; }

@media (max-width: 1200px) {
  .w1j-workspace, .w1j-workspace.expanded { width: min(900px, calc(100vw - 32px)); }
  .w1j-right { width: 208px; }
  .w1j-gantt-head, .w1j-gantt-row { grid-template-columns: 210px 1fr; }
  .w1j-global-project { grid-template-columns: 210px 1fr; }
}

/* ============ R7：图片编辑与版本闭环 ============ */
.cover-flag {
  position: absolute;
  right: 8px;
  top: 8px;
  background: var(--u6-gold, #e9c35f);
  color: var(--u6-gold, #4a3a12);
  font-size: 8px;
  padding: 3px 7px;
  border-radius: 5px;
  z-index: 4;
}

.editor-head .save-dirty {
  background: var(--u6-dark, #2d4539);
  color: #fff;
  border-color: var(--u6-line, #2d4539);
}

.tool-section .wide-tool { display: flex; align-items: center; gap: 7px; }

.brush-annotation {
  position: absolute;
  width: 34%;
  pointer-events: none;
  opacity: .85;
}

.brush-annotation svg { display: block; width: 100%; height: 18px; }
.brush-annotation path { fill: none; stroke: var(--u6-gold, #e9b44c); stroke-width: 3; stroke-linecap: round; }

.annotation-box.pending { outline: 2px dashed var(--u6-gold, #e9b44c); }

.annotation-box input {
  position: absolute;
  top: -22px;
  left: -2px;
  width: 160px;
  border: 1px solid var(--u6-gold, #c9a63a);
  background: var(--surface);
  border-radius: 5px;
  font-size: 9px;
  padding: 3px 5px;
  outline: 0;
}

.history-row {
  display: flex;
  align-items: center;
  gap: 6px;
  border-bottom: 1px solid var(--u6-line, #e4e3dc);
  padding: 6px 2px;
}

.history-main {
  flex: 1;
  border: 0;
  background: transparent;
  display: grid;
  grid-template-columns: 30px 1fr;
  gap: 10px;
  text-align: left;
  padding: 6px 4px;
  cursor: pointer;
  align-items: center;
}

.history-main > span {
  width: 28px;
  height: 28px;
  border-radius: 6px;
  background: var(--u6-paper, #e3e8e4);
  color: var(--u6-ink-soft, #4f6b5b);
  display: grid;
  place-items: center;
  font-size: 8px;
}

.history-row.active .history-main > span { background: var(--u6-dark, #2d4539); color: #fff; }
.history-main strong, .history-main small { display: block; font-size: 8px; }
.history-main strong { color: var(--u6-ink, #4f514d); }
.history-main small { color: var(--u6-ink-soft, #979891); margin-top: 3px; }

.cover-action {
  border: 1px solid var(--u6-line, #d8d7d0);
  background: var(--surface);
  border-radius: 7px;
  padding: 5px 8px;
  font-size: 8px;
  color: var(--u6-ink-soft, #55705f);
  cursor: pointer;
  white-space: nowrap;
}

.cover-action.is-cover { background: var(--u6-dark, #2d4539); color: #fff; border-color: var(--u6-line, #2d4539); }

.generate-material-filter { margin: 8px 0 4px; }

.compact-material { grid-template-columns: 48px 1fr; gap: 8px; }
.compact-material .material-thumb { height: 34px; }
.compact-material em { display: none; }

/* 图片场景色调（同一幕布样式下的项目差异） */
.architecture-image.tone-cool .sky { background: linear-gradient(#7d97a8 0 48%, #b3a08a 75%, #5c6058 76%); }
.architecture-image.tone-green .sky { background: linear-gradient(#7fa092 0 48%, #a8a98c 72%, #5d6657 76%); }
.architecture-image.tone-warm .sky { background: linear-gradient(#d0a37c 0 48%, #a98c78 75%, #5c564e 76%); }
.architecture-image.tone-dusk .sky { background: linear-gradient(#7c6a80 0 48%, #8c7a74 72%, #464b4c 76%); }
.architecture-image.tone-blue .sky { background: linear-gradient(#7d9fb8 0 48%, #9aa79e 75%, #5d6566 76%); }
.architecture-image.waterfront .sky { background: linear-gradient(#8fb2a8 0 52%, #7d8f88 72%, #55665f 76%); }

/* ===== W1-B：文件树视觉与可操作闭环 =====
   图标/层级/缩进为主体，文字低权重；次要操作 hover/聚焦 才出现；展开箭头只给有子项的目录；
   紧凑行高，收敛圆角；内联新建输入行；根区域作为「拖回根」落点。 */

/* 收敛圆角（行高 / 图标由 W1-K 紧凑树主块定义） */
.tree-node-icon { border-radius: 5px; }
.tree-root { cursor: pointer; border-radius: 6px; }
.file-drop-zone { border-radius: 5px; }

/* 次要操作（数量 / 类型 / 锁定 / 拖拽把手）hover 或聚焦才显示，避免每行多余按钮 */
.tree-row .file-count,
.tree-row .file-type,
.tree-row .tree-lock,
.tree-row .drag-hint { opacity: 0; transition: opacity .12s ease; }
.tree-row:hover .file-count, .tree-row.focused .file-count,
.tree-row:hover .file-type, .tree-row.focused .file-type,
.tree-row:hover .tree-lock, .tree-row.focused .tree-lock,
.tree-row:hover .drag-hint, .tree-row.focused .drag-hint { opacity: 1; }
.tree-row.file .file-type { opacity: 1; flex: 0 0 auto; min-width: 23px; padding: 1px 3px; border: 1px solid var(--u6-line, #d6dbd7); border-radius: 2px; color: var(--u6-ink-soft, #748078); background: var(--u6-paper, #f4f5f1); font-size: 7px; line-height: 11px; text-align: center; letter-spacing: .2px; }
.tree-row.file .file-type.unknown { color: var(--u6-gold, #8a7762); border-color: var(--u6-line, #ddd4c8); background: var(--u6-paper, #f7f3ed); }
.tree-row.restricted { color: var(--u6-ink-soft, #5a625d); }
.tree-restricted { margin-left: auto; width: 16px; height: 16px; display: grid; place-items: center; color: var(--u6-ink-soft, #758078); flex: 0 0 16px; }
.import-upload-progress { min-height: 18px; color: var(--u6-ink, #496554); font-size: 10px; line-height: 18px; }

/* 根区域作为「拖回根」的落点反馈 */
.tree-root.drop-target { background: var(--u6-paper, #dce7df); box-shadow: inset 0 0 0 1px #72907c; }

/* 内联新建文件夹输入行（缩进与同级树行一致） */
.tree-editing-row { margin-top: 4px; }
.tree-editing-row .tree-node-icon { width: 20px; height: 20px; flex: 0 0 20px; }
.tree-name-input { flex: 1; min-width: 0; height: 20px; padding: 0 7px; border: 1px solid var(--u6-line, #718b7a); border-radius: 4px; outline: none; background: var(--surface); color: var(--u6-ink, #33483c); font-size: 9px; }
.tree-name-input:focus { box-shadow: 0 0 0 2px rgba(85,118,99,.18); }
.tree-edit-hint { flex: 0 0 auto; color: var(--u6-ink-soft, #a3a69f); font-size: 7px; }

/* ---- W1-I 重置：右下三个独立悬浮工作对象（思想/规范/Argus）----
   三个对象彼此独立、无统一 rail/胶囊容器视觉，靠近画布右下角纵向排列；
   静止态各只露小图标+诗意符号，悬停单个对象仅展开其短名（其余保持小），点击打开内容面板；
   内容面板向左展开、与头部保持视觉连接；三对象互斥（点新收旧，再点当前收回）；
   幕布空白/Esc 收回；悬停只扩标签、绝不自动开内容；不遮挡缩放控件与底部中央工具栏。 */
.work-floats { position: absolute; right: 12px; bottom: 84px; z-index: 12; display: flex; flex-direction: column; align-items: flex-end; gap: 10px; }
.float-object { position: relative; display: flex; align-items: flex-start; }
.float-head { display: flex; align-items: center; gap: 0; border: 1px solid var(--u6-line, #d8d7d0); background: var(--u6-paper, #faf9f6); border-radius: 8px; box-shadow: var(--sh-rest); cursor: pointer; padding: 6px 8px; transition: border-color .18s ease, box-shadow .18s ease; }
.float-head:hover { border-color: var(--u6-line, #b9bdb5); box-shadow: var(--sh-lift); }
.float-object.open .float-head { border-color: var(--u6-line, #7b9485); box-shadow: var(--sh-lift); }
.float-symbol { width: 24px; height: 24px; flex: 0 0 24px; border-radius: 6px; display: grid; place-items: center; font-size: 12px; color: var(--u6-ink, #4b6355); background: var(--u6-paper, #e9ece6); transition: background .18s ease, color .18s ease; }
.float-object.open .float-symbol { background: var(--u6-dark, #3d5346); color: var(--u6-gold, #f2e3b6); }
.float-object[data-panel-tab="argus"] .float-symbol { background: var(--u6-dark, #2c4137); color: var(--u6-gold, #f2cb70); }
.float-object[data-panel-tab="argus"].open .float-symbol { background: var(--u6-dark, #26392f); color: var(--u6-gold, #f6d97e); }
.float-label { display: flex; align-items: center; gap: 6px; overflow: hidden; max-width: 0; opacity: 0; white-space: nowrap; transition: max-width .2s ease, opacity .18s ease, margin-left .2s ease; }
.float-object:hover .float-label, .float-object.open .float-label { max-width: 92px; opacity: 1; margin-left: 8px; }
.float-label em { font-style: normal; font-size: 11px; font-weight: 620; color: var(--u6-ink, #39423c); }
.float-dot { width: 7px; height: 7px; border-radius: 50%; display: inline-block; flex: 0 0 7px; }
.float-dot.idle { background: var(--u6-wash, #b6b9b2); }
.float-dot.ok { background: var(--u6-pick, #57a879); }
.float-dot.warn { background: var(--u6-flag, #cf715d); }
.float-dot.run { background: var(--u6-gold, #d8a13a); }
.panel-badge { min-width: 15px; height: 15px; padding: 0 4px; background: var(--u6-flag, #cf715d); color: #fff; border-radius: 8px; font-size: 9px; font-style: normal; display: grid; place-items: center; }
.float-panel { position: absolute; right: calc(100% + 6px); bottom: 0; width: 300px; display: flex; flex-direction: column; }
.float-object.expanded .float-panel { width: 430px; }
.panel-stack { display: flex; flex-direction: column; gap: 8px; }
.panel-layer { width: auto; background: var(--u6-paper, #f7f6f2); border: 1px solid var(--u6-line, #d4d3cc); border-radius: 8px; box-shadow: -4px 0 18px rgba(0,0,0,.08); overflow: hidden; display: flex; flex-direction: column; }
@media (max-width: 1280px) { .work-floats { right: 8px; } }
@media (prefers-reduced-motion: reduce) {
  .float-label, .float-head, .float-symbol, .personnel-hover-row, .personnel-hover-avatar, .personnel-main-avatar { transition: none; }
}

/* ---- W1-M 左下历史控制（按用户权威布局图固定底锚）+ 搜索·定位弹层 ----
   左下只放搜索/撤销/重做；缩放保持在右下，避免两个空间语义混组。 */
.bl-control { display: flex; flex-direction: column; align-items: center; gap: 3px; margin-top: auto; padding-top: 8px; width: 36px; }
.bl-control button { width: 36px; height: 36px; border: 0; background: transparent; border-radius: 9px; display: grid; place-items: center; color: var(--u6-ink-soft, #6f716c); cursor: pointer; }
.bl-control button:hover, .bl-control button.active { background: var(--u6-paper, #e7e8e1); color: var(--u6-ink, #234134); }
.bl-control button:focus-visible { outline: 2px solid var(--u6-line, #658271); outline-offset: 1px; }

/* W1-Z：项目初始页采用P1式序列浏览；分类“其他”向上展开，LGNR受全局权限控制。 */
.projects-page { position: relative; }
.projects-heading h1 { max-width: 720px; min-height: 62px; font-size: clamp(24px, 2.5vw, 38px); line-height: 1.28; }
.project-toolbar { margin-top: 34px; }
.project-filters { position: relative; display: flex; align-items: end; gap: 2px; }
.project-filters > button, .project-other-filter > button, .project-company-tabs button { white-space: nowrap; }
.project-filters button.locked { color: var(--u6-ink-soft, #a7aaa4); cursor: not-allowed; }
.project-other-filter { position: relative; }
.project-status-flyout { position: absolute; left: 50%; bottom: calc(100% + 5px); z-index: 12; width: 192px; padding: 3px; border: 1px solid var(--u6-line, #d8d8d1); background: var(--u6-paper, #faf9f6); box-shadow: var(--sh-lift); opacity: 0; visibility: hidden; transform: translate(-50%, 6px); transition: opacity .16s ease, transform .16s ease, visibility .16s; }
.project-other-filter:hover .project-status-flyout, .project-other-filter:focus-within .project-status-flyout { opacity: 1; visibility: visible; transform: translate(-50%, 0); }
.project-status-flyout button { width: 100%; height: 20px; display: grid; grid-template-columns: 7px 1fr auto; align-items: center; gap: 7px; margin: 0; padding: 0 7px; border: 0; background: transparent; color: var(--u6-ink-soft, #5d635e); font-size: 10px; line-height: 1; text-align: left; cursor: pointer; }
.project-status-flyout button:hover, .project-status-flyout button.active { background: var(--u6-paper, #e8ece8); color: var(--u6-ink, #34483c); }
.project-status-flyout i { width: 7px; height: 7px; border-radius: 2px; }
.project-status-flyout span { white-space: nowrap; }
.project-status-flyout em { color: var(--u6-ink-soft, #9a9e98); font-size: 9px; font-style: normal; }
.project-org-scope { display: flex; align-items: center; gap: 8px; margin-left: 8px; padding-left: 9px; border-left: 1px solid var(--u6-line, #d9dad3); }
.project-institute-tabs { display: flex; align-items: center; gap: 1px; }
.project-institute-tabs > span { margin-right: 5px; color: var(--u6-ink-soft, #9a9d97); font-size: 8px; letter-spacing: .08em; text-transform: uppercase; }
.project-institute-tabs button { height: 30px; margin: 0; padding: 0 7px; border: 0; border-bottom: 2px solid transparent; background: transparent; color: var(--u6-ink-soft, #858983); font-size: 9px; cursor: pointer; }
.project-institute-tabs button.active { color: var(--u6-ink, #263a31); border-bottom-color: var(--u6-line, #263a31); background: var(--u6-paper, #e7ebe7); }
.project-institute-tabs button.unavailable { color: var(--u6-ink-mute, #b9bbb6); cursor: default; }
.project-institute-tabs em { margin-left: 4px; color: var(--u6-ink-soft, #68736c); font-size: 8px; font-style: normal; }
.project-company-tabs { display: flex; align-items: center; gap: 1px; padding-left: 8px; border-left: 1px solid var(--u6-line, #d9dad3); }
.project-company-tabs button { min-width: 42px; height: 30px; display: flex; align-items: center; justify-content: center; gap: 5px; margin: 0; padding: 0 7px; border: 0; border-bottom: 2px solid transparent; background: transparent; color: var(--u6-ink-soft, #888c86); cursor: pointer; }
.project-company-tabs button:hover { color: var(--u6-ink, #46534b); background: var(--u6-paper, #eceee9); }
.project-company-tabs button.active { color: var(--u6-ink, #263a31); border-bottom-color: var(--u6-line, #263a31); background: var(--u6-paper, #e7ebe7); }
.project-company-tabs strong { font-family: Georgia, serif; font-size: 12px; font-weight: 500; }
.project-company-tabs em { color: var(--u6-ink-soft, #989c96); font-size: 8px; font-style: normal; }
.project-company-tabs button.active em { color: var(--u6-ink-soft, #68736c); }
.project-institute-tabs button:focus-visible, .project-company-tabs button:focus-visible, .project-filters button:focus-visible, .projects-heading .primary-button:focus-visible { outline: 2px solid var(--u6-line, #607c6c); outline-offset: 2px; }
.project-grid { display: flex; flex-wrap: wrap; align-items: flex-start; gap: 12px; overflow: visible; }
.project-card, .project-card.featured { width: 232px; min-height: 158px; height: 158px; flex: 0 0 232px; padding: 15px; overflow: hidden; transition: width .24s cubic-bezier(.2,.8,.2,1), height .24s cubic-bezier(.2,.8,.2,1), flex-basis .24s cubic-bezier(.2,.8,.2,1), padding .24s cubic-bezier(.2,.8,.2,1), box-shadow .2s ease, background .2s ease; }
.project-card:hover, .project-card:focus-within { z-index: 8; width: 476px; height: 328px; flex-basis: 476px; padding: 22px; transform: none; box-shadow: var(--sh-lift); }
.project-card .project-symbol { width: 34px; height: 34px; }
.project-card .project-name { margin-top: auto; font-size: 11px; }
.project-card .project-meta { margin-top: 7px; }
.project-expanded-copy, .project-card .project-avatars, .project-card .project-stats, .project-card .project-pending, .project-card .ingestion-badge { display: none; }
.project-card:hover .project-symbol, .project-card:focus-within .project-symbol { width: 56px; height: 56px; font-size: 23px; }
.project-card:hover .project-name, .project-card:focus-within .project-name { margin-top: 18px; font-size: 16px; }
.project-card:hover .project-meta, .project-card:focus-within .project-meta { margin-top: 8px; }
.project-card:hover .project-expanded-copy, .project-card:focus-within .project-expanded-copy { display: block; margin-top: 24px; max-width: 330px; color: var(--u6-ink-soft, #777b75); }
.project-expanded-copy span { display: block; margin-bottom: 6px; color: var(--u6-ink-soft, #9a9d97); font-size: 8px; letter-spacing: .08em; }
.project-expanded-copy p { margin: 0; color: var(--u6-ink, #454a45); font-size: 11px; line-height: 1.55; }
.project-card:hover .project-avatars, .project-card:focus-within .project-avatars { display: flex; margin-top: 18px; }
.project-card:hover .project-stats, .project-card:focus-within .project-stats { display: flex; flex-wrap: wrap; margin-top: 12px; gap: 5px; }
.project-card:hover .project-stats span, .project-card:focus-within .project-stats span { padding: 3px 6px; font-size: 8px; }
.project-card:hover .project-pending, .project-card:focus-within .project-pending { display: block; bottom: 14px; right: 14px; max-width: 160px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.project-card:hover .ingestion-badge, .project-card:focus-within .ingestion-badge { display: block; }
.folder-drop-overlay > div { border-radius: 6px; }
@media (prefers-reduced-motion: reduce) { .project-card, .project-status-flyout { transition: none; } }

/* W1-AF：项目入口按Muse的安静画布 + Obsidian Canvas的软件密度重排。 */
.app-frame:has(.projects-page) { background: var(--u6-paper, #f5f5f1); }
.app-frame:has(.projects-page) .app-header { height: 52px; padding: 0 18px; background: var(--u6-paper, #f7f7f4); border-bottom-color: var(--u6-line, #dedfd9); }
.app-frame:has(.projects-page) .brand-mark { width: 26px; height: 26px; margin-right: 10px; border-radius: 5px; font-size: 13px; }
.app-frame:has(.projects-page) .crumb { padding: 6px 8px; font-size: 11px; }
.app-frame:has(.projects-page) .icon-button { width: 30px; height: 30px; border-radius: 5px; }
.app-frame:has(.projects-page) .personnel-main-avatar { width: 28px; height: 28px; border-radius: 50%; }
.projects-page { height: calc(100vh - 52px); padding: 24px 28px 48px; scrollbar-width: none; background-color: var(--u6-paper, #f5f5f1); background-image: radial-gradient(#d6d8d1 0.65px, transparent 0.65px); background-size: 18px 18px; }
.projects-page::-webkit-scrollbar { display: none; }
.projects-heading { max-width: none; min-height: 92px; display: grid; grid-template-columns: minmax(220px, 1fr) minmax(280px, 520px) minmax(220px, 1fr); align-items: center; margin: 0; padding: 0 2px 18px; border-bottom: 1px solid var(--u6-line, #dfe0da); }
.projects-heading > div { min-width: 0; }
.projects-heading .eyebrow { margin: 0 0 5px; color: var(--u6-ink-soft, #999d97); font-size: 8px; font-weight: 600; letter-spacing: .11em; }
.projects-title-row { display: flex; align-items: baseline; gap: 12px; }
.projects-heading .projects-title-row h1 { min-height: 0; margin: 0; font-family: inherit; font-size: 20px; font-weight: 620; line-height: 1.2; letter-spacing: -.01em; }
.projects-title-row span { color: var(--u6-ink-soft, #8a8e88); font-size: 9px; }
.projects-heading-side { width: 100%; }
.projects-heading-end { display: flex; justify-content: flex-end; }
.project-daily-line { position: relative; align-self: stretch; display: grid; place-items: center; margin: 0; padding: 20px 34px 8px; color: var(--u6-ink, #2f3d36); font-family: "Songti SC", "Noto Serif CJK SC", serif; font-size: 18px; font-weight: 500; line-height: 1.6; letter-spacing: .07em; text-align: center; text-wrap: balance; }
.project-daily-line::before { content: ""; position: absolute; top: 10px; left: 50%; width: 26px; height: 2px; background: var(--u6-dark, #526b5d); transform: translateX(-50%); }
.projects-heading .primary-button { min-height: 30px; padding: 0 10px; border: 1px solid var(--u6-line, #cfd2cc); border-radius: 5px; background: var(--u6-paper, #f9f9f6); color: var(--u6-ink, #39443e); font-size: 9px; box-shadow: none; }
.projects-heading .primary-button:hover { border-color: var(--u6-line, #aeb5af); background: var(--u6-paper, #ecefea); }
.project-toolbar { display: flex; align-items: center; gap: 14px; margin-top: 14px; padding: 0 2px 12px; border-bottom: 1px solid var(--u6-line, #e2e3dd); }
.project-search { width: 210px; height: 30px; flex: 0 0 210px; padding: 0 9px; border-color: var(--u6-line, #d9dad4); border-radius: 5px; background: rgba(249,249,246,.82); }
.project-search input { font-size: 9px; }
.project-filters { min-width: 0; flex: 1; align-items: center; gap: 1px; }
.project-filters > button, .project-other-filter > button { height: 30px; padding: 0 8px; margin: 0; border-bottom-width: 2px; font-size: 9px; }
.project-org-scope { gap: 6px; margin-left: 6px; padding-left: 7px; }
.project-institute-tabs > span { font-size: 7px; }
.project-institute-tabs button, .project-company-tabs button { height: 28px; border-radius: 3px 3px 0 0; }
.project-institute-tabs button { padding: 0 5px; }
.project-company-tabs { padding-left: 6px; }
.project-company-tabs button { min-width: 36px; padding: 0 5px; }
.project-grid { max-width: none; margin: 16px auto 0; display: grid; grid-template-columns: repeat(auto-fill, 232px); grid-auto-rows: 158px; grid-auto-flow: row dense; gap: 10px; justify-content: center; align-content: flex-start; align-items: stretch; }
.project-card, .project-card.featured { width: 232px; height: 158px; grid-column: auto; grid-row: auto; flex-basis: 232px; padding: 13px; border: 1px solid var(--u6-line, #d6d8d2); border-radius: 6px; background: rgba(250,250,247,.92); color: var(--u6-ink, #292d2a); box-shadow: none; }
.project-card.featured .project-symbol { background: #e9ece7; color: #3d5146; }
.project-card.featured .project-state { color: var(--u6-ink-soft, #757b76); }
.project-card, .project-card.featured { transition: border-color .14s ease, background-color .14s ease, box-shadow .14s ease; }
.project-card:hover:not(.is-expanded), .project-card:focus-within:not(.is-expanded) { width: 232px; height: 158px; grid-column: auto; grid-row: auto; padding: 13px; }
.project-card.is-expanded { width: auto; height: auto; grid-row: span 2; padding: 18px; border-color: var(--u6-line, #9ca8a1); background: var(--u6-paper, #fbfbf8); box-shadow: var(--sh-lift); }
.project-card .project-symbol { width: 30px; height: 30px; border-radius: 4px; background: #eceee9; font-size: 14px; }
.project-card .project-state { top: 13px; right: 13px; font-size: 8px; }
.project-card .project-state span { width: 5px; height: 5px; }
.project-card .project-menu { top: 37px; right: 8px; opacity: 0; }
.project-card:hover .project-menu, .project-card:focus-within .project-menu { opacity: 1; }
.project-card .project-name { max-width: 92%; font-size: 10px; font-weight: 580; line-height: 1.35; }
.project-card .project-meta { gap: 4px; margin-top: 6px; }
.project-card .project-meta span { padding: 2px 4px; border-radius: 3px; background: transparent; color: var(--u6-ink-soft, #858983); font-size: 8px; }
.project-card.featured .project-meta span { padding: 2px 4px; border-radius: 3px; background: transparent; color: var(--u6-ink-soft, #858983); font-size: 8px; }
.project-card:hover .project-symbol, .project-card:focus-within .project-symbol { width: 44px; height: 44px; border-radius: 5px; font-size: 18px; }
.project-card:hover .project-name, .project-card:focus-within .project-name { margin-top: 14px; font-size: 14px; }
.project-card:hover .project-expanded-copy, .project-card:focus-within .project-expanded-copy { margin-top: 18px; }
.project-expanded-copy span { font-size: 7px; }
.project-expanded-copy p { font-size: 10px; }
.project-card:hover .project-avatars, .project-card:focus-within .project-avatars { margin-top: 14px; }
.project-card:hover .project-stats, .project-card:focus-within .project-stats { margin-top: 9px; }
.project-card:hover .project-stats span, .project-card:focus-within .project-stats span { border-radius: 3px; background: var(--u6-paper, #eef0eb); color: var(--u6-ink-soft, #777d78); }
.project-card.featured:hover .project-stats span, .project-card.featured:focus-within .project-stats span { background: var(--u6-paper, #eef0eb); color: var(--u6-ink-soft, #777d78); }
.project-card:hover .project-pending, .project-card:focus-within .project-pending { border-radius: 3px; background: var(--u6-paper, #f1eadb); color: var(--u6-gold, #80672f); }
.empty-projects { padding: 54px 0; color: var(--u6-ink-soft, #999d97); text-align: left; }

.project-card.is-expanded .project-expanded-copy { order: 1; }
.project-card.is-expanded .project-name { order: 2; margin-top: auto; }
.project-card.is-expanded .project-meta { order: 3; }
.project-card.is-expanded .project-avatars { order: 4; margin-top: 10px; }
.project-card.is-expanded .project-stats { order: 5; margin-top: 7px; }

.project-card:hover .project-expanded-copy, .project-card:focus-within .project-expanded-copy,
.project-card:hover .project-avatars, .project-card:focus-within .project-avatars,
.project-card:hover .project-stats, .project-card:focus-within .project-stats,
.project-card:hover .project-pending, .project-card:focus-within .project-pending,
.project-card:hover .ingestion-badge, .project-card:focus-within .ingestion-badge { animation: project-detail-in .14s ease-out both; }
@keyframes project-detail-in { from { opacity: 0; } to { opacity: 1; } }

.project-org-scope { gap: 5px; margin-left: 5px; padding-left: 6px; }
.project-institute-tabs { gap: 0; }
.project-institute-tabs > span { display: none; }
.project-institute-tabs, .project-company-tabs { display: flex; align-items: center; }
.project-institute-tabs button, .project-company-tabs button { position: relative; height: 26px; overflow: hidden; }
.project-institute-tabs button { width: 31px; min-width: 31px; padding: 0 3px; font-size: 8px; }
.project-company-tabs { gap: 0; padding-left: 5px; }
.project-company-tabs button { width: 24px; min-width: 24px; padding: 0 2px; }
.project-institute-tabs button strong, .project-company-tabs button strong { display: block; font: inherit; }
.project-company-tabs button strong { font-family: Georgia, serif; font-size: 10px; }
.project-scope-count { min-width: 26px; margin: 0 4px 0 6px; color: var(--u6-ink-soft, #8f948e); font-size: 8px; font-style: normal; font-variant-numeric: tabular-nums; text-align: left; }
.project-company-tabs .project-scope-count { margin-right: 0; }

.personnel-entry { margin-left: 2px; }
.app-frame:has(.projects-page) .personnel-presence-preview { top: 40px; }
.app-frame:has(.projects-page) .w1j-panel { top: 52px; }

.locate-pop { position: fixed; left: 62px; top: auto; bottom: 18px; z-index: 40; width: 300px; background: var(--u6-paper, #faf9f6); border: 1px solid var(--u6-line, #d5d3ca); border-radius: 10px; box-shadow: var(--sh-lift); display: flex; flex-direction: column; overflow: hidden; animation: locate-in .18s ease; }
@keyframes locate-in { from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: translateY(0); } }
.locate-head { height: 40px; flex: 0 0 auto; display: flex; align-items: center; justify-content: space-between; padding: 0 8px 0 14px; border-bottom: 1px solid var(--u6-line, #e3e2da); background: var(--u6-paper, #f4f3ee); }
.locate-title { font-size: 11px; font-weight: 650; color: var(--u6-ink, #2c3a33); }
.locate-close { border: 0; background: transparent; width: 26px; height: 26px; border-radius: 6px; color: var(--u6-ink-soft, #8a8c85); cursor: pointer; display: grid; place-items: center; }
.locate-close:hover { background: var(--u6-paper, #e6e5df); }
.locate-input { height: 34px; margin: 10px 12px 0; border: 1px solid var(--u6-line, #d8d7d0); border-radius: 7px; padding: 0 10px; font-size: 11px; color: var(--u6-ink, #2f322e); outline: none; background: var(--surface); }
.locate-input:focus { border-color: var(--u6-line, #8aa391); box-shadow: 0 0 0 2px rgba(85,118,99,.14); }
.locate-list { max-height: 300px; overflow: auto; padding: 8px; display: flex; flex-direction: column; gap: 2px; }
.locate-item { border: 0; background: transparent; display: grid; grid-template-columns: 26px 1fr auto; align-items: center; gap: 8px; text-align: left; padding: 7px 8px; border-radius: 7px; cursor: pointer; }
.locate-item:hover { background: var(--u6-paper, #eef0eb); }
.locate-kind { width: 24px; height: 24px; border-radius: 6px; background: var(--u6-paper, #e9ece6); color: var(--u6-ink, #4b6355); display: grid; place-items: center; font-size: 10px; font-style: normal; }
.locate-item span { font-size: 11px; color: var(--u6-ink, #3b3f3a); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.locate-item small { font-size: 9px; color: var(--u6-ink-soft, #9a9c95); white-space: nowrap; }
.locate-empty { font-size: 10px; color: var(--u6-ink-soft, #a5a69f); padding: 14px 10px; text-align: center; }
.locate-foot { margin: 0; padding: 8px 14px; border-top: 1px solid var(--u6-line, #e8e7e1); color: var(--u6-ink-soft, #999b94); font-size: 9px; }
.panel-compact { max-height: 196px; }
.panel-full { max-height: 430px; }
.panel-head { height: 34px; flex: 0 0 auto; display: flex; align-items: center; gap: 8px; padding: 0 10px; border-bottom: 1px solid var(--u6-line, #e2e1da); background: var(--u6-paper, #faf9f6); }
.panel-head strong { font-size: 11px; color: var(--u6-ink, #2c3a33); }
.panel-ctx { font-size: 10px; color: var(--u6-ink-soft, #8a8c85); flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; text-align: right; }
.panel-head-btn { border: 1px solid var(--u6-line, #d8d7d0); background: var(--u6-paper, #f2f1ec); border-radius: 5px; font-size: 9px; color: var(--u6-ink, #4b5a52); padding: 3px 7px; cursor: pointer; flex: 0 0 auto; }
.panel-head-btn:hover { background: var(--u6-paper, #e8e7e0); }
.panel-body { padding: 10px 12px; overflow: auto; min-height: 0; }
.panel-theme { font-family: Georgia,"Songti SC"; font-size: 13px; line-height: 1.7; color: var(--u6-ink, #33413a); margin: 2px 0 10px; }
.panel-principles { display: flex; flex-wrap: wrap; gap: 5px; margin-bottom: 10px; }
.panel-chip { font-size: 9px; background: var(--u6-paper, #e8ece7); color: var(--u6-ink-soft, #52705f); border-radius: 4px; padding: 3px 7px; }
.panel-note { font-size: 9px; color: var(--u6-ink-soft, #9a9c95); margin: 8px 0 0; line-height: 1.6; }
.panel-section { font-size: 9px; letter-spacing: .08em; color: var(--u6-ink-soft, #8a8c85); margin: 8px 0 6px; text-transform: uppercase; }
.panel-list { list-style: none; margin: 0; padding: 0; }
.panel-list li { font-size: 11px; color: var(--u6-ink, #3f423e); padding: 5px 0; border-bottom: 1px solid var(--u6-line, #ecebe5); line-height: 1.55; }
.panel-list li:last-child { border-bottom: 0; }
.panel-list li small { display: block; font-size: 9px; color: var(--u6-ink-soft, #95968f); margin-top: 2px; }
.panel-empty { color: var(--u6-ink-soft, #a5a69f); font-size: 10px; }
.panel-standard-row { display: flex; align-items: flex-start; gap: 8px; }
.std-main { flex: 1; display: flex; flex-direction: column; gap: 2px; }
.std-main small { color: var(--u6-ink-soft, #95968f); font-size: 9px; }
.std-status { font-size: 8px; border-radius: 4px; padding: 1px 5px; align-self: flex-start; }
.std-status.pass { background: var(--u6-paper, #e4eee7); color: var(--u6-pick, #3f6b52); }
.std-status.warn { background: var(--u6-gold, #f6e8d7); color: var(--u6-gold, #a66a28); }
.std-locate { border: 1px solid var(--u6-line, #d3d5cd); background: var(--surface); border-radius: 5px; font-size: 9px; color: var(--u6-ink, #3f5a4c); padding: 4px 8px; cursor: pointer; flex: 0 0 auto; }
.std-locate:hover { background: var(--u6-paper, #eef1ec); }
.argus-input-row { display: flex; gap: 6px; align-items: flex-end; margin: 4px 0 8px; }
.argus-input { flex: 1; height: 58px; border: 1px solid var(--u6-line, #d7d5ce); border-radius: 6px; background: var(--surface); padding: 7px 9px; resize: none; font-size: 10px; line-height: 1.5; color: var(--u6-ink, #2f322e); }
.argus-input:focus { outline: 1px solid var(--u6-line, #8aa391); border-color: var(--u6-line, #8aa391); }
.argus-run { border: 0; background: var(--u6-dark, #2d4539); color: #fff; border-radius: 6px; font-size: 10px; padding: 8px 12px; cursor: pointer; flex: 0 0 auto; }
.argus-run:disabled { background: var(--u6-wash, #a9b0ab); cursor: default; }
.argus-status { font-size: 9px; color: var(--u6-ink-soft, #8a8c85); }
.argus-status.run { color: var(--u6-gold, #b07b1f); }
.argus-status.done { color: var(--u6-pick, #3f6b52); }
.argus-msg { display: flex; flex-direction: column; gap: 2px; }
.argus-msg b { font-size: 8px; color: var(--u6-ink-soft, #6f7a73); }
.argus-msg.agent b { color: var(--u6-gold, #a66a28); }
.argus-status-row { display: flex; align-items: center; gap: 8px; margin: 4px 0 6px; }
.argus-status-row .argus-status { flex: 1; }
.panel-cog-summary { display: flex; flex-wrap: wrap; gap: 5px; margin: 6px 0; }
.panel-cog-chip { font-size: 9px; color: var(--u6-ink, #4b5a52); background: var(--u6-paper, #eef1ec); border: 1px solid var(--u6-line, #dfe2da); border-radius: 10px; padding: 2px 8px; }
.panel-cog-chip b { color: var(--u6-ink, #2c3a33); }
.panel-details { border: 1px solid var(--u6-line, #ecebe5); border-radius: 6px; margin: 6px 0; }
.panel-details summary { font-size: 10px; color: var(--u6-ink, #4b5a52); padding: 6px 8px; cursor: pointer; user-select: none; }
.panel-details[open] summary { border-bottom: 1px solid var(--u6-line, #ecebe5); }
.panel-details .panel-list { padding: 4px 8px; }
.argus-fact { display: flex; flex-direction: column; gap: 2px; }
.argus-fact-row { display: flex; align-items: baseline; gap: 4px; flex-wrap: wrap; }
.argus-fact b { color: var(--u6-ink, #2c3a33); }
.argus-fact em { font-style: normal; color: var(--u6-gold, #a66a28); font-weight: 620; }
.argus-tag { color: var(--u6-ink-soft, #6f7a73); }
.argus-src { color: var(--u6-ink-soft, #95968f); word-break: break-all; }
.argus-q { display: flex; flex-direction: column; gap: 4px; }
.argus-q-text { line-height: 1.5; }
.argus-q-opts { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 2px; }
.argus-opt { border: 1px solid var(--u6-line, #c9cfc6); background: var(--u6-paper, #f4f6f1); border-radius: 10px; font-size: 9px; color: var(--u6-ink, #2c3a33); padding: 3px 9px; cursor: pointer; }
.argus-opt:hover { background: var(--u6-paper, #e2ece2); }
.argus-opt:disabled { background: var(--u6-paper, #e9eae6); color: var(--u6-ink-soft, #a0a39d); cursor: default; }
.argus-q-answer { display: flex; gap: 6px; align-items: center; margin-top: 2px; }
.argus-q-input { flex: 1; min-width: 0; height: 24px; border: 1px solid var(--u6-line, #d7d5ce); border-radius: 5px; background: var(--surface); padding: 0 8px; font-size: 10px; color: var(--u6-ink, #2f322e); }
.argus-q-input:focus { outline: 1px solid var(--u6-line, #8aa391); border-color: var(--u6-line, #8aa391); }

/* ---- CAD 面积交叉验收固定五列（按容器宽度横排/纵向，字段完整；不按 viewport）---- */
.argus-cross { container-type: inline-size; display: flex; flex-direction: column; gap: 4px; padding: 6px 2px; }
.argus-cross-head { display: flex; align-items: baseline; gap: 6px; flex-wrap: wrap; }
.argus-cross-head b { color: var(--u6-ink, #2c3a33); word-break: break-all; }
.argus-tag-warn { color: var(--u6-gold, #a66a28); font-weight: 600; }
.argus-tag-ok { color: var(--u6-pick, #2c6e49); font-weight: 600; }
.argus-cross-table { width: 100%; border-collapse: collapse; table-layout: fixed; }
.argus-cross-table th, .argus-cross-table td {
  font-size: 10px; border: 1px solid var(--u6-line, #e3e2da); padding: 4px 6px; vertical-align: top; text-align: left;
  word-break: break-all; line-height: 1.5;
}
.argus-cross-table th { background: var(--u6-paper, #f1f2ec); color: var(--u6-ink, #4b5a52); font-weight: 600; width: 15%; }
.argus-cross-table td { color: var(--u6-ink, #2f322e); }
@container (max-width: 520px) {
  .argus-cross-table thead { display: none; }
  .argus-cross-table, .argus-cross-table tbody, .argus-cross-table tr, .argus-cross-table td { display: block; width: 100%; }
  .argus-cross-table tr { border: 1px solid var(--u6-line, #e3e2da); margin-bottom: 6px; }
  .argus-cross-table td { border: 0; border-bottom: 1px solid var(--u6-line, #efefe8); padding: 3px 6px; }
  .argus-cross-table td::before { content: attr(data-label); display: inline-block; width: 92px; color: var(--u6-ink, #4b5a52); font-weight: 600; margin-right: 8px; }
}

/* ---- W1-D 组图：画布原生对象（收起态叠图 + 聚焦翻页 + 查看器）---- */
.group-card { background: var(--u6-paper, #fbfaf7); }
.group-card.selected .group-body { outline: none; }
.group-body { position: relative; height: calc(100% - 80px); margin: 0 10px; }
.group-stack { position: absolute; inset: 0; }
.group-layer { position: absolute; inset: 0; border-radius: 8px; overflow: hidden; }
.group-layer.gl-back { border: 1px solid var(--u6-line, #ddd9cc); background: var(--u6-paper, #f2f0e8); }
.group-layer.gl-back.gl-b2 { transform: translate(7px, 7px); }
.group-layer.gl-back.gl-b1 { transform: translate(3px, 3px); }
.group-layer.gl-front { border: 1px solid var(--u6-line, #d3d0c2); box-shadow: 0 3px 10px rgba(40, 46, 41, .10); background: var(--u6-paper, #eef0ea); }
.group-layer.gl-front .architecture-image { height: 100%; width: 100%; }
.group-real-image, .canvas-real-image, .editor-real-image { display: block; width: 100%; height: 100%; object-fit: contain; background: #e9e9e4; }
.canvas-real-image { height: calc(100% - 54px); min-height: 120px; }
.editor-real-image { position: absolute; inset: 0; }
.import-file-stack { height: calc(100% - 58px); margin: 0 12px 10px; padding: 12px; border: 1px solid var(--u6-line, #d8dcd8); background: var(--u6-paper, #f3f4f0); display: grid; grid-template-columns: 1fr auto; grid-template-rows: auto 1fr auto; gap: 7px 10px; overflow: hidden; }
.import-file-stack > strong { color: var(--u6-ink, #44534a); font-size: 16px; letter-spacing: .5px; }
.import-file-stack > span, .import-file-stack > small { color: var(--u6-ink-soft, #8a918b); font-size: 9px; }
.import-file-stack > ul { grid-column: 1 / -1; margin: 0; padding: 0; list-style: none; min-height: 0; overflow: hidden; }
.import-file-stack li { height: 19px; overflow: hidden; color: var(--u6-ink-soft, #5f6661); font-size: 9px; line-height: 19px; text-overflow: ellipsis; white-space: nowrap; border-top: 1px solid var(--u6-line, #e0e3df); }
.import-file-stack > small { grid-column: 1 / -1; }

/* W1-AP：导入对象直接铺在幕布上，不再套“文件卡片”外框。 */
.canvas-card.imported-canvas-object {
  overflow: visible;
  border: 0;
  border-radius: 0;
  background: transparent;
  box-shadow: none;
}
.canvas-card.imported-canvas-object.selected {
  border: 0;
  box-shadow: none;
  outline: 1px dashed color-mix(in srgb, var(--u6-pick, #365b48) 64%, transparent);
  outline-offset: 8px;
  /* 选中卡不建立新堆叠上下文：手柄 z8 可跨出卡片压过重叠对象，卡身本身仍允许 Ctrl 点选下一张可见卡。 */
  z-index: auto;
}
/* Keep image paint order unchanged when selection toggles. The wrapper stays
   flat so resize/connection handles can remain above overlapping card bodies. */
.canvas-card.imported-canvas-object:has(> .imported-single-image) { z-index: auto; }
.canvas-card.imported-canvas-object > .imported-single-image { z-index: 2; }
.imported-canvas-object .group-body { height: 100%; margin: 0; }
.imported-canvas-object .group-stack { inset: 0 54px 34px 18px; overflow: visible; }
.imported-canvas-object .group-layer { border: 0 !important; border-radius: 9px; background: transparent; box-shadow: 0 7px 18px rgba(37, 43, 38, .12); }
.imported-canvas-object .group-layer.gl-back { opacity: .9; }
.imported-canvas-object .group-layer.gl-back.gl-b2 { transform: translate(-16px, 12px) rotate(-2.2deg); }
.imported-canvas-object .group-layer.gl-back.gl-b1 { transform: translate(-8px, 6px) rotate(-1deg); }
.imported-canvas-object .group-layer.gl-front { transform: translate(0, 0); }
.imported-canvas-object .group-real-image { object-fit: cover; background: transparent; }
.imported-canvas-object .group-count { right: 7px; top: 7px; border: 0; background: rgba(32, 43, 37, .78); color: #fff; }
.group-expand-pill {
  position: absolute;
  right: -2px;
  top: 42%;
  min-height: 38px;
  padding: 0 13px;
  border: 0;
  border-radius: 20px;
  background: rgba(230, 229, 224, .94);
  color: var(--u6-ink-soft, #898b84);
  font-size: 10px;
  cursor: pointer;
}
.group-expand-pill b { margin-left: 4px; color: var(--u6-ink, #20231f); font-size: 15px; }
.imported-object-caption {
  position: absolute;
  left: 18px;
  right: 54px;
  bottom: 0;
  display: flex;
  align-items: baseline;
  gap: 8px;
  min-width: 0;
  color: var(--u6-ink-soft, #777b74);
}
.imported-object-caption strong { overflow: hidden; color: var(--u6-ink, #343934); font-size: 10px; font-weight: 640; text-overflow: ellipsis; white-space: nowrap; }
.imported-object-caption span { flex: 0 0 auto; color: var(--u6-ink-soft, #999c95); font-size: 8px; }
.imported-canvas-object .group-page-nav { bottom: 38px; }

.imported-asset, .imported-single-image { position: relative; width: 100%; height: 100%; padding-bottom: 34px; }
.asset-real-preview, .asset-video, .imported-single-image .canvas-real-image {
  display: block;
  width: 100%;
  height: calc(100% - 34px);
  border: 0;
  border-radius: 8px;
  background: #e6e6e0;
  box-shadow: var(--sh-rest);
  object-fit: contain;
}
.asset-video { background: var(--u6-dark, #1f211f); object-fit: cover; }
.imported-asset .imported-object-caption, .imported-single-image .imported-object-caption { left: 0; right: 0; }
.asset-generated-preview {
  position: relative;
  height: calc(100% - 34px);
  overflow: hidden;
  border-radius: 8px;
  background: var(--u6-paper, #eceee9);
  box-shadow: var(--sh-rest);
}
.asset-generated-preview > span { position: absolute; left: 14px; top: 12px; color: var(--u6-ink, #31483d); font: 600 14px/1 Georgia, serif; letter-spacing: .08em; }
.asset-generated-preview > small { position: absolute; right: 12px; bottom: 10px; color: var(--u6-ink-soft, #8b918b); font-size: 8px; }
.asset-preview-lines {
  position: absolute;
  inset: 34px 16px 20px;
  background: repeating-linear-gradient(30deg, transparent 0 21px, rgba(77, 101, 88, .27) 22px 23px, transparent 24px 43px), repeating-linear-gradient(140deg, transparent 0 28px, rgba(119, 132, 121, .2) 29px 30px, transparent 31px 52px);
  clip-path: polygon(2% 8%, 72% 0, 96% 25%, 88% 91%, 31% 100%, 0 72%);
}
.asset-generated-preview.kind-archive { background: var(--u6-paper, #e8e4dc); }
.asset-generated-preview.kind-archive .asset-preview-lines { inset: 50px 60px 34px; background: repeating-linear-gradient(90deg, var(--u6-gold, #b6a990) 0 5px, transparent 5px 10px); clip-path: none; }
.asset-generated-preview.kind-unknown { background: repeating-linear-gradient(135deg, var(--u6-paper, #eeece6) 0 12px, var(--u6-paper, #e7e4dc) 12px 24px); }

.knowledge-card { z-index: 3; }
.knowledge-object {
  width: 100%;
  height: 100%;
  padding: 14px 16px 12px;
  border-left: 2px solid var(--u6-pick-deep, #2e5443);
  background: rgba(247, 246, 241, .92);
  box-shadow: var(--sh-rest);
  backdrop-filter: blur(10px);
}
.knowledge-object-head { display: grid; grid-template-columns: 30px minmax(0, 1fr) auto; gap: 9px; align-items: center; }
.knowledge-object-head > span { display: grid; width: 28px; height: 28px; place-items: center; border-radius: 7px; background: var(--u6-pick-deep, #29483a); color: var(--u6-gold, #f0cc72); font: 600 10px/1 Georgia, serif; }
.knowledge-object-head strong, .knowledge-object-head small { display: block; }
.knowledge-object-head strong { font-size: 11px; }
.knowledge-object-head small { margin-top: 2px; color: var(--u6-ink-soft, #8b8f88); font-size: 8px; }
.knowledge-object-head button { min-height: 30px; border: 1px solid var(--u6-line, #ccd2cc); border-radius: 5px; background: transparent; color: var(--u6-ink, #395746); font-size: 8px; cursor: pointer; }
.knowledge-object > p { margin: 11px 0 8px; color: var(--u6-ink-soft, #5d625d); font: 10px/1.65 Georgia, "Songti SC", serif; }
.knowledge-facts { display: flex; flex-wrap: wrap; gap: 5px; }
.knowledge-facts span { padding: 3px 6px; border-radius: 3px; background: var(--u6-paper, #e8ece7); color: var(--u6-ink-soft, #5d6e64); font-size: 8px; }
.knowledge-foot { position: absolute; left: 16px; bottom: 10px; color: var(--u6-ink-soft, #9b9e97); font-size: 7px; }
.group-count { position: absolute; right: 8px; top: 8px; z-index: 3; background: rgba(35, 46, 40, .82); color: #fff; font-size: 9px; padding: 3px 8px; border-radius: 10px; pointer-events: none; }
.group-page-nav { position: absolute; inset: 0; z-index: 4; pointer-events: none; }
.group-page-nav button { position: absolute; top: 50%; transform: translateY(-50%); width: 22px; height: 30px; border: 1px solid var(--u6-line, #d3d0c5); background: rgba(250, 249, 246, .94); border-radius: 6px; color: var(--u6-ink, #4d5a52); font-size: 15px; line-height: 1; cursor: pointer; pointer-events: auto; box-shadow: var(--sh-rest); }
.group-page-nav button:hover { background: var(--surface); }
.group-page-nav button:first-child { left: -9px; }
.group-page-nav button:last-child { right: -9px; }

/* 组图大图查看器（独立浮层，覆盖画布但低于编辑器；不重建画布） */
.group-viewer { position: fixed; inset: 64px 0 0; z-index: 45; display: flex; align-items: center; justify-content: center; background: rgba(28, 31, 29, .82); }
.gv-panel { display: flex; flex-direction: column; align-items: center; gap: 14px; width: min(72vw, 1000px); }
.gv-head { display: flex; align-items: center; gap: 14px; color: #fff; }
.gv-head strong { font-size: 14px; font-weight: 620; }
.gv-count { color: #cdd4cf; font-size: 12px; }
.gv-stage { position: relative; display: flex; align-items: center; gap: 12px; width: 100%; justify-content: center; }
.gv-image { width: min(66vw, 900px); height: 62vh; border-radius: 10px; overflow: hidden; border: 1px solid rgba(255, 255, 255, .16); box-shadow: 0 24px 60px rgba(0, 0, 0, .4); background: var(--u6-paper, #dfe0d8); }
.gv-image .architecture-image { height: 100%; width: 100%; }
.gv-image .group-real-image { width: 100%; height: 100%; object-fit: contain; }
.gv-nav { width: 40px; height: 40px; flex: 0 0 40px; border: 1px solid rgba(255, 255, 255, .25); background: rgba(0, 0, 0, .28); color: #fff; border-radius: 8px; font-size: 20px; line-height: 1; cursor: pointer; }
.gv-nav:hover { background: rgba(0, 0, 0, .5); }
.gv-toolbar { display: flex; gap: 10px; }
.gv-toolbar button { border: 1px solid rgba(255, 255, 255, .25); background: rgba(0, 0, 0, .28); color: #fff; padding: 8px 15px; border-radius: 8px; font-size: 11px; cursor: pointer; }
.gv-toolbar button:hover { background: rgba(0, 0, 0, .5); }
.gv-hint { color: var(--u6-ink-soft, #a8b0aa); font-size: 10px; }
.gv-zoom { display: flex; align-items: center; gap: 8px; margin-left: auto; }
.gv-zoom-slider { width: 160px; accent-color: #ffd27a; }
.gv-zoom-pct { min-width: 46px; text-align: right; font-size: 11px; color: #fff; font-variant-numeric: tabular-nums; }
.gv-zoom button { border: 1px solid rgba(255, 255, 255, .25); background: rgba(0, 0, 0, .28); color: #fff; padding: 6px 12px; border-radius: 8px; font-size: 11px; cursor: pointer; }

/* 幻灯片翻页查看器（W1-BP）：覆盖画布但低于编辑器；不重建画布 */
.ppt-viewer { position: fixed; inset: 64px 0 0; z-index: 45; display: flex; align-items: center; justify-content: center; background: rgba(28, 31, 29, .82); }
.pv-panel { display: flex; flex-direction: column; align-items: center; gap: 14px; width: min(82vw, 1240px); }
.pv-head { display: flex; align-items: center; gap: 14px; color: #fff; }
.pv-head strong { font-size: 14px; font-weight: 620; }
.pv-count { color: #cdd4cf; font-size: 12px; }
.pv-stage { position: relative; display: flex; align-items: center; gap: 12px; width: 100%; justify-content: center; }
.pv-image { width: min(76vw, 1120px); height: 70vh; border-radius: 10px; overflow: hidden; border: 1px solid rgba(255, 255, 255, .16); box-shadow: 0 24px 60px rgba(0, 0, 0, .4); background: var(--u6-paper, #e7e7e1); display: flex; align-items: center; justify-content: center; }
.pv-image img { max-width: 100%; max-height: 100%; object-fit: contain; }
.pv-nav { width: 40px; height: 40px; flex: 0 0 40px; border: 1px solid rgba(255, 255, 255, .25); background: rgba(0, 0, 0, .28); color: #fff; border-radius: 8px; font-size: 20px; line-height: 1; cursor: pointer; }
.pv-nav:hover { background: rgba(0, 0, 0, .5); }
.pv-hint { color: var(--u6-ink-soft, #a8b0aa); font-size: 10px; }

/* 组图右键菜单（中文显式动作：组成组图 / 移出当前图片 / 加入组图） */
.context-menu { position: fixed; z-index: 120; min-width: 176px; max-width: 260px; background: var(--u6-paper, #faf9f6); border: 1px solid var(--u6-line, #d5d3ca); border-radius: 9px; box-shadow: var(--sh-lift); padding: 5px; display: flex; flex-direction: column; }
.context-menu button { border: 0; background: transparent; text-align: left; padding: 7px 11px; border-radius: 6px; font-size: 11px; cursor: pointer; color: var(--u6-ink, #2c332e); display: flex; flex-direction: column; align-items: stretch; gap: 1px; }
.context-menu button:hover { background: var(--u6-paper, #ebeae4); }
.context-menu button .menu-label { display: flex; align-items: center; gap: 6px; width: 100%; white-space: nowrap; }
.context-menu .menu-check { color: var(--u6-pick, #4b715c); font-size: 10px; }
.context-menu .menu-arrow { margin-left: auto; color: var(--u6-ink-soft, #a6a7a1); font-size: 12px; line-height: 1; }
.context-menu button small { font-size: 9px; color: var(--u6-ink-soft, #a0a19b); max-width: 230px; white-space: normal; }
.context-menu button:disabled { color: var(--u6-ink-mute, #b3b3ab); cursor: default; }
.context-menu button:disabled:hover { background: transparent; }
.context-menu button:disabled small { color: var(--u6-ink-mute, #b8b8b0); }
.context-menu .menu-sep { height: 1px; background: var(--u6-paper, #e4e2da); margin: 4px 6px; }
/* W1-E 便签卡片（浅黄便利贴） */
.note-card { background: var(--u6-gold, #fff8dc); border-color: var(--u6-gold, #e0d59a); }
.note-card .card-head { background: transparent; }
.note-card .card-kind { background: var(--u6-gold, #f0e6b6); color: var(--u6-gold, #6b5d20); }
.note-content { padding: 4px 14px 14px; font-family: Georgia, "Songti SC"; font-size: 12px; line-height: 1.7; color: var(--u6-gold, #57502c); }

/* ============ W1-G 图片编辑器 → 视频端连续折叠 ============ */
/* 视频层在编辑器内原位展开：从编辑器左缘滑入，覆盖图像画布左侧；Esc/幕布空白逐层收回 */
.editor-body { position: relative; }
.to-video-btn { border: 1px solid var(--u6-line, #2d4539) !important; background: var(--u6-dark, #2d4539) !important; color: var(--u6-gold, #f2c862) !important; }
.to-video-btn:hover { background: var(--u6-pick-deep, #3a5a49) !important; }
.video-panel {
  position: absolute;
  left: 0; top: 0; bottom: 0;
  width: 330px;
  background: var(--u6-paper, #f4f3ee);
  border-right: 1px solid var(--u6-line, #c9c8c0);
  box-shadow: 12px 0 28px rgba(35, 40, 37, .10);
  z-index: 7;
  display: flex;
  flex-direction: column;
  animation: vp-slide-in .18s ease-out;
  pointer-events: auto;
}
.video-panel.work { width: 640px; }
@keyframes vp-slide-in { from { transform: translateX(-6%); opacity: .6; } to { transform: translateX(0); opacity: 1; } }
.video-head {
  height: 52px;
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 0 12px;
  border-bottom: 1px solid var(--u6-line, #d8d7d0);
  background: var(--u6-paper, #faf9f6);
}
.video-head strong { font-size: 11px; }
.video-chip { font-size: 8px; background: var(--u6-dark, #2d4539); color: var(--u6-gold, #f2c862); padding: 4px 7px; border-radius: 5px; }
.video-panel-close { margin-left: auto; border: 0; background: transparent; font-size: 15px; color: var(--u6-ink-soft, #7a7c75); cursor: pointer; width: 26px; height: 26px; border-radius: 6px; }
.video-panel-close:hover { background: var(--u6-paper, #e6e5df); }
.video-body { flex: 1; overflow: auto; padding: 12px; display: flex; flex-direction: column; gap: 12px; }
.vp-firstframe { display: flex; flex-direction: column; gap: 6px; }
.vp-label { font-size: 9px; font-weight: 650; color: var(--u6-ink, #4f534d); }
.vp-frame { position: relative; border: 1px solid var(--u6-line, #d4d3cc); border-radius: 8px; overflow: hidden; background: var(--u6-paper, #d8d8d3); }
.vp-frame-tag { position: absolute; left: 0; bottom: 0; right: 0; background: rgba(20, 26, 23, .62); color: #fff; font-size: 8px; font-style: normal; padding: 4px 8px; }
.vp-frame .architecture-image.large { height: 150px; }
.vp-frame-tiny { width: 78px; height: 46px; flex: none; }
.vp-frame-tiny .architecture-image.large { height: 46px; }
.vp-last-empty { display: grid; place-items: center; height: 100%; font-size: 8px; color: var(--u6-ink-soft, #8a8c85); background: var(--u6-paper, #e8e7e1); border: 1px dashed var(--u6-line, #bfc0b8); border-radius: 6px; }
.vp-fields { display: flex; flex-direction: column; gap: 10px; }
.vp-fields label { font-size: 9px; font-weight: 650; color: var(--u6-ink, #4f534d); display: flex; align-items: center; gap: 8px; }
.vp-fields select { flex: 1; border: 1px solid var(--u6-line, #d7d5ce); background: var(--surface); border-radius: 6px; padding: 6px 8px; font-size: 10px; }
.vp-fields .vp-block { flex-direction: column; align-items: stretch; gap: 5px; }
.vp-fields textarea { width: 100%; border: 1px solid var(--u6-line, #d7d5ce); border-radius: 6px; background: var(--surface); padding: 8px; font-size: 10px; line-height: 1.5; resize: none; }
.vp-checkbox { font-weight: 500 !important; }
.vp-checkbox em, .vp-toggle em { font-style: normal; font-size: 8px; color: var(--u6-ink-soft, #9a9c95); font-weight: 400; }
.vp-lastframe-box { display: flex; align-items: center; gap: 8px; border: 1px dashed var(--u6-line, #b9b9b0); background: var(--u6-paper, #ecebe5); border-radius: 7px; padding: 8px 10px; font-size: 9px; color: var(--u6-ink-soft, #6f726b); }
.vp-lastframe-box i { width: 20px; height: 13px; border-radius: 3px; background: repeating-linear-gradient(135deg, var(--u6-wash, #c9c8c0) 0 4px, var(--u6-paper, #efeee9) 4px 8px); }
.vp-check { border: 1px solid var(--u6-line, #dddcd5); border-radius: 8px; background: var(--u6-paper, #faf9f6); padding: 10px; }
.vp-check-title { font-size: 9px; font-weight: 650; color: var(--u6-ink, #4f534d); margin-bottom: 7px; }
.vp-check ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 5px; }
.vp-check li { font-size: 9px; color: var(--u6-ink, #5c5f58); padding-left: 16px; position: relative; }
.vp-check li::before { content: ""; position: absolute; left: 0; top: 2px; width: 9px; height: 9px; border-radius: 50%; }
.vp-check li.ok::before { background: var(--u6-pick, #57a879); }
.vp-check li.idle::before { background: var(--u6-gold, #d4c9a0); }
.vp-check li.warn::before { background: var(--u6-gold, #c2a25b); }
.video-foot { height: 58px; border-top: 1px solid var(--u6-line, #d8d7d0); background: var(--u6-paper, #faf9f6); display: flex; align-items: center; gap: 8px; padding: 0 12px; }
.video-foot button { border-radius: 7px; padding: 9px 12px; font-size: 10px; cursor: pointer; border: 1px solid var(--u6-line, #d0cfc8); background: var(--surface); }
.video-foot .vp-generate { flex: 1; background: var(--u6-paper, #e6e5df); color: var(--u6-ink-soft, #9a9c95); border-color: var(--u6-line, #d5d4cd); cursor: not-allowed; }
.video-foot .vp-continue { background: var(--u6-dark, #2d4539); color: #fff; border-color: var(--u6-line, #2d4539); }
.video-foot .vp-continue:hover { background: var(--u6-pick-deep, #3a5a49); }
.video-foot .vp-back { background: var(--u6-paper, #f4f3ef); }
.video-foot .vp-back:hover { background: var(--u6-paper, #e9e8e2); }
.vp-summary { display: flex; flex-direction: column; gap: 2px; border: 1px solid var(--u6-line, #dcdbd4); background: var(--u6-paper, #faf9f6); border-radius: 8px; padding: 9px 11px; }
.vp-summary span { font-size: 8px; color: var(--u6-ink-soft, #8a8c85); }
.vp-summary strong { font-size: 11px; }
.vp-summary small { font-size: 9px; color: var(--u6-ink-soft, #6f726b); }
.vp-timeline { display: flex; flex-direction: column; gap: 8px; }
.vp-timeline-track { display: flex; align-items: center; gap: 10px; border: 1px solid var(--u6-line, #d8d7d0); background: var(--u6-paper, #faf9f6); border-radius: 8px; padding: 10px; }
.vp-bar { flex: 1; height: 12px; border-radius: 6px; background: linear-gradient(90deg, var(--u6-dark, #2d4539) 0 18%, var(--u6-dark, #6f8a7a) 18% 62%, var(--u6-gold, #c2a25b) 62% 100%); border: 1px solid var(--u6-line, #cfcec6); position: relative; }
.vp-bar::after { content: "首帧→末帧 时间轴"; position: absolute; inset: 0; display: grid; place-items: center; font-size: 7px; color: rgba(255, 255, 255, .85); }
.vp-shotlist { display: flex; flex-direction: column; gap: 6px; }
.vp-shot { border: 1px solid var(--u6-line, #dddcd5); border-radius: 7px; background: var(--u6-paper, #faf9f6); padding: 8px 10px; display: grid; grid-template-columns: 62px 1fr; gap: 2px 8px; }
.vp-shot em { font-style: normal; font-size: 8px; color: var(--u6-ink-soft, #55705f); grid-row: span 2; align-self: center; }
.vp-shot strong { font-size: 10px; }
.vp-shot small { font-size: 8px; color: var(--u6-ink-soft, #8a8c85); }
.vp-toggles { display: flex; gap: 10px; }
.vp-toggle { flex: 1; border: 1px solid var(--u6-line, #dddcd5); border-radius: 8px; background: var(--u6-paper, #faf9f6); padding: 9px 11px; font-size: 10px; font-weight: 650; display: flex; align-items: center; gap: 7px; color: var(--u6-ink, #4f534d); }
.vp-toggle input { accent-color: var(--u6-ink, #2d4539); }
.vp-note { font-size: 8px; color: var(--u6-ink-soft, #92948d); line-height: 1.6; border-top: 1px dashed var(--u6-line, #d8d7d0); padding-top: 9px; }
@media (max-width: 1280px) {
  .video-panel { width: 300px; }
  .video-panel.work { width: 560px; }
}

/* W1-AR：封面裁决采用 B 的暗色项目图册；颜色仅由语义变量控制，后续设置页可切换主题。 */
:root {
  --project-shell: #292a31;
  --project-shell-deep: #222329;
  --project-shell-line: rgba(255, 255, 255, .13);
  --project-shell-text: #f3f0e8;
  --project-shell-muted: rgba(243, 240, 232, .52);
  --project-band: #f3f0e8;
  --project-band-text: #252721;
}
.app-frame:has(.projects-page) { background: var(--project-shell); }
.app-frame:has(.projects-page) .app-header {
  color: var(--project-shell-text);
  background: var(--project-shell-deep);
  border-bottom-color: var(--project-shell-line);
}
.app-frame:has(.projects-page) .brand-mark { background: var(--project-band); color: var(--u6-ink, #26332c); }
.app-frame:has(.projects-page) .crumb,
.app-frame:has(.projects-page) .sync,
.app-frame:has(.projects-page) .icon-button { color: var(--project-shell-muted); }
.app-frame:has(.projects-page) .crumb:hover,
.app-frame:has(.projects-page) .icon-button:hover { color: var(--project-shell-text); background: rgba(255,255,255,.07); }
.app-frame:has(.projects-page) .avatar.owner { color: var(--project-band-text); background: var(--project-band); }

.projects-page {
  color: var(--project-shell-text);
  background-color: var(--project-shell);
  background-image: linear-gradient(90deg, rgba(255,255,255,.018) 1px, transparent 1px);
  background-size: 64px 100%;
}
.projects-heading { border-bottom-color: var(--project-shell-line); }
.projects-heading .eyebrow,
.projects-title-row span { color: var(--project-shell-muted); }
.projects-heading .projects-title-row h1 { color: var(--project-shell-text); }
.project-daily-line { color: var(--project-shell-text); }
.project-daily-line::before { background: rgba(243,240,232,.5); }
.projects-heading .primary-button { color: var(--project-shell-text); background: transparent; border-color: var(--project-shell-line); }
.projects-heading .primary-button:hover { color: var(--project-band-text); background: var(--project-band); border-color: var(--project-band); }
.project-toolbar { border-bottom-color: var(--project-shell-line); }
.project-search { color: var(--project-shell-muted); background: rgba(255,255,255,.04); border-color: var(--project-shell-line); }
.project-search input { color: var(--project-shell-text); }
.project-search input::placeholder { color: rgba(243,240,232,.32); }
.project-filters > button,
.project-other-filter > button,
.project-institute-tabs button,
.project-company-tabs button { color: var(--project-shell-muted); }
.project-filters > button:hover,
.project-other-filter > button:hover,
.project-institute-tabs button:hover,
.project-company-tabs button:hover { color: var(--project-shell-text); background: rgba(255,255,255,.055); }
.project-filters > button.active,
.project-other-filter > button.active,
.project-institute-tabs button.active,
.project-company-tabs button.active { color: var(--project-shell-text); background: transparent; border-bottom-color: var(--project-shell-text); }
.project-org-scope,
.project-company-tabs { border-color: var(--project-shell-line); }
.project-scope-count { color: rgba(243,240,232,.42); }
.project-status-flyout { color: var(--project-band-text); background: var(--project-band); border-color: rgba(0,0,0,.12); }

.project-grid {
  grid-template-columns: repeat(auto-fill, 270px);
  grid-auto-rows: 252px;
  gap: 22px 18px;
  justify-content: start;
}
.project-card,
.project-card.featured,
.project-card.is-expanded {
  position: relative;
  display: flex;
  width: 270px;
  min-height: 252px;
  height: 252px;
  padding: 0;
  grid-column: auto;
  grid-row: auto;
  overflow: visible;
  border: 0;
  border-radius: 0;
  background: transparent;
  color: var(--project-band-text);
  box-shadow: none;
  transform-origin: center bottom;
  transition: transform .22s cubic-bezier(.2,.8,.2,1), filter .22s ease;
}
.project-card:hover,
.project-card:focus-within,
.project-card.is-expanded {
  z-index: 8;
  width: 270px;
  height: 252px;
  padding: 0;
  grid-column: auto;
  grid-row: auto;
  transform: translateY(-5px) scale(1.018);
  filter: drop-shadow(0 16px 24px rgba(0,0,0,.22));
}
.project-card:focus-visible { outline: 2px solid rgba(255,255,255,.76); outline-offset: 5px; }
.project-cover-visual {
  position: relative;
  height: 178px;
  flex: 0 0 178px;
  overflow: hidden;
  background: linear-gradient(145deg, #d2c5aa 0 25%, #697468 25% 29%, #ac7654 29% 60%, #424c45 60%);
}
.project-card:nth-child(4n+2) .project-cover-visual { background: conic-gradient(from 222deg at 68% 66%, #566159 0 24%, #c2baa2 24% 42%, #718071 42% 57%, #9d7e62 57% 78%, #474e49 78%); }
.project-card:nth-child(4n+3) .project-cover-visual { background: linear-gradient(118deg, #79685f 0 19%, #c2aa8d 19% 39%, #4f5d57 39% 43%, #9d7259 43% 70%, #cfc0a6 70%); }
.project-card:nth-child(4n+4) .project-cover-visual { background: linear-gradient(180deg, #8fa1a0 0 49%, #d1c1a4 49% 58%, #536565 58% 62%, #91a7a6 62%); }
.project-cover-visual::before {
  content: "";
  position: absolute;
  left: 13%;
  bottom: -21%;
  width: 74%;
  height: 68%;
  border: 1px solid rgba(255,255,255,.58);
  transform: perspective(360px) rotateX(57deg) rotateZ(-8deg);
  box-shadow: inset 0 0 0 17px rgba(255,255,255,.05), inset 0 0 0 18px rgba(255,255,255,.32);
}
.project-cover-visual::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(118deg, transparent 0 48%, rgba(255,255,255,.25) 48.4%, transparent 48.8%), linear-gradient(180deg, transparent 52%, rgba(0,0,0,.28));
  pointer-events: none;
}
.project-card .project-symbol,
.project-card.featured .project-symbol {
  position: absolute;
  left: 14px;
  top: 13px;
  z-index: 2;
  width: 34px;
  height: 34px;
  border: 1px solid rgba(255,255,255,.32);
  border-radius: 3px;
  background: rgba(30,34,31,.52);
  color: #fff;
  font-size: 15px;
  backdrop-filter: blur(8px);
  transition: transform .2s ease, background-color .2s ease;
}
.project-card:hover .project-symbol,
.project-card:focus-within .project-symbol,
.project-card.is-expanded .project-symbol { width: 34px; height: 34px; border-radius: 3px; font-size: 15px; transform: scale(1.06); background: rgba(24,28,25,.72); }
.project-card .project-state,
.project-card.featured .project-state { top: 15px; right: 14px; z-index: 3; color: rgba(255,255,255,.82); font-size: 8px; }
.project-card .project-state span { background: var(--u6-paper, #dce7d7); }
.project-card .project-menu { top: 40px; right: 9px; z-index: 6; color: #fff; background: rgba(25,29,26,.44); }
.project-expanded-copy {
  position: absolute;
  left: 14px;
  right: 14px;
  top: 60px;
  z-index: 3;
  display: block;
  margin: 0;
  opacity: 0;
  transform: translateY(5px);
  transition: opacity .18s ease, transform .18s ease;
}
.project-expanded-copy span { color: rgba(255,255,255,.52); }
.project-expanded-copy p { display: -webkit-box; overflow: hidden; margin: 0; color: rgba(255,255,255,.92); font-size: 9px; line-height: 1.55; -webkit-line-clamp: 3; -webkit-box-orient: vertical; }
.project-hover-data {
  position: absolute;
  left: 14px;
  right: 14px;
  bottom: 11px;
  z-index: 3;
  display: flex;
  align-items: end;
  justify-content: space-between;
  gap: 10px;
  opacity: 0;
  transform: translateY(5px);
  transition: opacity .18s ease .03s, transform .18s ease .03s;
}
.project-card:hover .project-expanded-copy,
.project-card:focus-within .project-expanded-copy,
.project-card.is-expanded .project-expanded-copy,
.project-card:hover .project-hover-data,
.project-card:focus-within .project-hover-data,
.project-card.is-expanded .project-hover-data { opacity: 1; transform: translateY(0); }
.project-card .project-avatars,
.project-card:hover .project-avatars,
.project-card:focus-within .project-avatars { display: flex; margin: 0; }
.project-card .project-avatars span { width: 22px; height: 22px; border-color: rgba(255,255,255,.72); font-size: 7px; }
.project-card .project-stats,
.project-card:hover .project-stats,
.project-card:focus-within .project-stats {
  display: flex;
  margin: 0;
  gap: 7px;
  color: rgba(255,255,255,.58);
  font-size: 7px;
}
.project-card .project-stats span,
.project-card:hover .project-stats span,
.project-card:focus-within .project-stats span { padding: 0; background: transparent; color: inherit; white-space: nowrap; }
.project-card .project-stats strong { color: #fff; font-size: 8px; font-weight: 600; }
.project-info-band {
  position: relative;
  z-index: 4;
  display: grid;
  grid-template-columns: minmax(0,1fr) auto;
  gap: 10px;
  align-items: end;
  min-height: 74px;
  padding: 12px 14px 13px;
  background: var(--project-band);
}
.project-card .project-name,
.project-card:hover .project-name,
.project-card:focus-within .project-name,
.project-card.is-expanded .project-name { max-width: none; margin: 0 0 4px; overflow: hidden; color: var(--project-band-text); font-family: "Songti SC", "Noto Serif CJK SC", serif; font-size: 12px; font-weight: 650; line-height: 1.3; text-overflow: ellipsis; white-space: nowrap; }
.project-card .project-meta,
.project-card:hover .project-meta,
.project-card:focus-within .project-meta { margin: 0; gap: 5px; }
.project-card .project-meta span,
.project-card.featured .project-meta span { padding: 0; color: var(--u6-ink-soft, #7d7e76); background: transparent; font-size: 8px; }
.project-card-index { color: var(--u6-ink-soft, #97978e); font: 9px Georgia, serif; letter-spacing: .04em; white-space: nowrap; }
.project-card .project-pending,
.project-card .ingestion-badge { display: none !important; }
.project-card .project-menu-pop { z-index: 12; }
.empty-projects { color: var(--project-shell-muted); }

/* 非聚焦视频只有轻量封面；聚焦后才赋真实 src、请求媒体并播放。 */
.asset-video-shell {
  position: relative;
  width: 100%;
  height: calc(100% - 34px);
  overflow: hidden;
  border-radius: 8px;
  background: var(--u6-dark, #1f211f);
  box-shadow: var(--sh-rest);
}
.asset-video-shell .asset-video,
.asset-video-poster {
  position: absolute;
  inset: 0;
  display: block;
  width: 100%;
  height: 100%;
  border: 0;
  border-radius: 0;
  object-fit: cover;
}
.asset-video-shell .asset-video { opacity: 0; pointer-events: none; }
.asset-video-poster { opacity: .84; transition: opacity .18s ease; }
.video-focus-trigger {
  position: absolute;
  left: 50%;
  top: 50%;
  display: flex;
  min-width: 112px;
  min-height: 42px;
  align-items: center;
  justify-content: center;
  gap: 7px;
  border: 1px solid rgba(255,255,255,.42);
  border-radius: 4px;
  background: rgba(20,24,21,.72);
  color: #fff;
  font-size: 9px;
  cursor: pointer;
  transform: translate(-50%,-50%);
  transition: background-color .18s ease, transform .18s ease;
}
.video-focus-trigger:hover { background: rgba(20,24,21,.9); transform: translate(-50%,-50%) scale(1.03); }
.asset-video-shell.is-active .asset-video { opacity: 1; pointer-events: auto; }
.asset-video-shell.is-active .asset-video-poster,
.asset-video-shell.is-active .video-focus-trigger { opacity: 0; pointer-events: none; }
.video-compact-controls {
  position: absolute;
  right: 8px;
  bottom: 8px;
  left: 8px;
  z-index: 4;
  display: flex;
  height: 28px;
  align-items: center;
  gap: 7px;
  padding: 0 7px;
  opacity: 0;
  border: 1px solid rgba(255,255,255,.16);
  border-radius: 2px;
  background: rgba(17,20,18,.78);
  color: #f3f4ef;
  pointer-events: none;
  transform: translateY(3px);
  transition: opacity .12s ease, transform .12s ease;
}
.asset-video-shell.is-active .video-compact-controls { opacity: 1; pointer-events: auto; transform: translateY(0); }
/* active 视频卡片置顶：卡片层(canvas-world)默认 z=auto 低于右下 zoom HUD(z:10)/工具栏(z:10)，
   使其紧凑控制条可被真实指针点到；仅在视频激活(有 .is-active)期间生效，argus 面板(z:12)仍在上。 */
.canvas-stage:has(.asset-video-shell.is-active) .canvas-world { z-index: 11; }
.video-compact-controls button {
  height: 22px;
  min-width: 24px;
  padding: 0 5px;
  border: 0;
  border-radius: 1px;
  background: transparent;
  color: inherit;
  font: 600 8px/1 system-ui, sans-serif;
  cursor: pointer;
}
.video-compact-controls button:hover { background: rgba(255,255,255,.12); }
.video-compact-controls [data-video-toggle] { font-size: 11px; }
.video-compact-controls [data-video-time] { flex: 0 0 auto; min-width: 58px; font: 500 8px/1 ui-monospace, monospace; white-space: nowrap; }
.video-compact-controls input[type="range"] {
  min-width: 48px;
  height: 12px;
  flex: 1 1 auto;
  margin: 0;
  appearance: none;
  background: transparent;
  cursor: pointer;
}
.video-compact-controls input[type="range"]::-webkit-slider-runnable-track { height: 2px; background: rgba(255,255,255,.42); }
.video-compact-controls input[type="range"]::-webkit-slider-thumb { width: 8px; height: 8px; margin-top: -3px; appearance: none; border: 0; border-radius: 50%; background: var(--u6-paper, #f3f4ef); }
.video-compact-controls input[type="range"]::-moz-range-track { height: 2px; background: rgba(255,255,255,.42); }
.video-compact-controls input[type="range"]::-moz-range-thumb { width: 8px; height: 8px; border: 0; border-radius: 50%; background: var(--u6-paper, #f3f4ef); }

@media (prefers-reduced-motion: reduce) {
  .project-card,
  .project-card .project-symbol,
  .project-expanded-copy,
  .project-hover-data,
  .asset-video-poster,
  .video-focus-trigger,
  .video-compact-controls { transition: none; }
}

/* W1-AS：严格对齐已裁决 B 模板的封面主句比例，并以 A 的信息层深化项目 hover。 */
.projects-heading {
  min-height: 218px;
  grid-template-columns: minmax(520px, 1.35fr) minmax(400px, .8fr);
  align-items: end;
  gap: clamp(36px, 5vw, 78px);
  padding: 30px 2px 28px;
}
.project-daily-block { min-width: 0; align-self: end; }
.project-daily-kicker {
  margin: 0 0 12px;
  color: var(--project-shell-muted);
  font-size: 9px;
  font-weight: 600;
  letter-spacing: .15em;
  text-transform: uppercase;
}
.project-daily-line {
  display: block;
  max-width: 780px;
  margin: 0;
  padding: 0;
  color: var(--project-shell-text);
  font-family: "Songti SC", "Noto Serif CJK SC", Georgia, serif;
  font-size: clamp(38px, 4vw, 58px);
  font-weight: 500;
  line-height: 1.08;
  letter-spacing: -.035em;
  text-align: left;
  text-wrap: balance;
}
.project-daily-line::before { display: none; }
.project-daily-note {
  max-width: 620px;
  margin: 14px 0 0;
  color: var(--project-shell-muted);
  font-size: 10px;
  line-height: 1.6;
}
.projects-heading-aside {
  min-width: 0;
  align-self: stretch;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  gap: 26px;
}
.projects-heading-context { display: flex; align-items: end; justify-content: space-between; gap: 24px; }
.projects-heading-context .projects-heading-start { width: auto; }
.projects-heading-context .projects-heading-end { width: auto; flex: 0 0 auto; }
.projects-heading-aside .project-org-scope {
  width: 100%;
  min-height: 38px;
  justify-content: flex-end;
  margin: 0;
  padding: 10px 0 0;
  border-top: 1px solid var(--project-shell-line);
  border-left: 0;
}
.project-toolbar { margin-top: 18px; }

.project-card,
.project-card.featured,
.project-card.is-expanded {
  transform-origin: center center;
  transition: transform .26s cubic-bezier(.16,1,.3,1), filter .26s ease;
  will-change: transform;
}
.project-card:hover,
.project-card:focus-within,
.project-card.is-expanded {
  z-index: 20;
  transform: translateY(-12px) scale(1.10);
  filter: drop-shadow(0 22px 34px rgba(0,0,0,.34));
}
.project-card:active { transform: translateY(-8px) scale(1.065); }
.project-expanded-copy { top: 56px; }
.project-hover-heading { display: flex; min-height: 24px; align-items: center; justify-content: space-between; gap: 12px; }
.project-expanded-copy .project-hover-heading > span { margin: 0; }
.project-expanded-copy .project-avatars,
.project-card:hover .project-expanded-copy .project-avatars,
.project-card:focus-within .project-expanded-copy .project-avatars { display: flex; margin: 0; }
.project-expanded-copy .project-avatars span { width: 20px; height: 20px; font-size: 7px; }
.project-expanded-copy p {
  max-width: 220px;
  font-size: 9px;
  line-height: 1.45;
  -webkit-line-clamp: 2;
}
.project-hover-data,
.project-card:hover .project-hover-data,
.project-card:focus-within .project-hover-data {
  left: 0;
  right: 0;
  bottom: 0;
  display: grid;
  grid-template-columns: repeat(4, minmax(0,1fr));
  align-items: start;
  gap: 8px;
  min-height: 55px;
  padding: 10px 14px 11px;
  background: rgba(26,29,27,.82);
  backdrop-filter: blur(10px);
}
.project-hover-data > span { min-width: 0; }
.project-hover-data em {
  display: block;
  overflow: hidden;
  margin: 0 0 3px;
  color: rgba(255,255,255,.52);
  font-size: 7px;
  font-style: normal;
  letter-spacing: .04em;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.project-hover-data > span > strong {
  display: block;
  overflow: hidden;
  color: #fff;
  font-size: 8px;
  font-weight: 620;
  line-height: 1.35;
  text-overflow: ellipsis;
  white-space: nowrap;
}

@media (max-width: 1180px) {
  .projects-heading { grid-template-columns: minmax(0,1fr) 390px; gap: 32px; }
  .project-daily-line { font-size: clamp(36px,4.4vw,48px); }
}

@media (prefers-reduced-motion: reduce) {
  .project-card:hover,
  .project-card:focus-within,
  .project-card.is-expanded,
  .project-card:active { transform: none; }
}

/* W1-AT：以 B 预览为唯一几何源，而不是继续做近似改写。 */
.projects-page { padding: 0 0 80px; }
.projects-heading,
.project-toolbar,
.project-grid { width: min(1130px, calc(100% - 56px)); }
.projects-heading {
  min-height: 0;
  grid-template-columns: minmax(0,1fr) auto;
  align-items: end;
  gap: 34px;
  margin: 0 auto;
  padding: clamp(36px,6vh,72px) 0 0;
  border-bottom: 0;
}
.projects-heading h1.project-daily-line {
  max-width: 720px;
  min-height: 0;
  margin: 0;
  font-size: clamp(34px,4vw,58px);
  line-height: 1.08;
  letter-spacing: -.035em;
}
.project-daily-note {
  max-width: 620px;
  margin-top: 12px;
  font-size: 11px;
  line-height: 1.55;
}
.projects-heading-aside {
  width: auto;
  min-width: 390px;
  align-self: end;
  gap: 8px;
}
.projects-heading-aside-head {
  display: flex;
  min-height: 30px;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  color: rgba(243,240,232,.38);
  font-size: 8px;
  letter-spacing: .1em;
}
.projects-heading-aside .project-org-scope {
  min-height: 30px;
  padding: 0;
  border-top: 0;
}
.project-toolbar {
  margin: clamp(28px,4vh,42px) auto 22px;
  padding: 0;
  border-bottom: 0;
}
.project-grid {
  grid-template-columns: repeat(3,minmax(0,1fr));
  grid-auto-rows: auto;
  gap: 28px 18px;
  justify-content: stretch;
  margin: 0 auto;
}
.project-card,
.project-card.featured,
.project-card.is-expanded,
.project-card:hover,
.project-card:focus-within {
  width: 100%;
  min-height: 0;
  height: auto;
}
.project-cover-visual {
  width: 100%;
  height: auto;
  flex: 0 0 auto;
  aspect-ratio: 4 / 3;
}
.project-info-band {
  min-height: 84px;
  padding: 13px 15px 14px;
}
.project-card .project-name,
.project-card:hover .project-name,
.project-card:focus-within .project-name,
.project-card.is-expanded .project-name { font-size: 15px; }
.project-card .project-meta span,
.project-card.featured .project-meta span { font-size: 9px; }
.project-card-index { font-size: 11px; }
.project-expanded-copy { left: 15px; right: 15px; top: 62px; }
.project-expanded-copy p { max-width: 300px; font-size: 10px; }
.project-hover-data,
.project-card:hover .project-hover-data,
.project-card:focus-within .project-hover-data {
  min-height: 62px;
  padding: 12px 15px;
  gap: 10px;
}
.project-hover-data em { font-size: 8px; }
.project-hover-data > span > strong { font-size: 10px; }

@media (max-width: 1160px) {
  .projects-heading,
  .project-toolbar,
  .project-grid { width: calc(100% - 40px); }
  .projects-heading { gap: 24px; }
  .projects-heading-aside { min-width: 360px; }
}

/* W1-AU：按 B 预览补齐页眉、字体与组织控件；宽屏采用 4×270 左右的项目图册密度。 */
.app-frame:has(.projects-page) .app-header.project-cover-header {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
  height: 58px;
  padding: 0 18px 0 22px;
}
.project-cover-header .project-header-context {
  display: flex;
  min-width: 0;
  align-items: baseline;
  justify-self: start;
  gap: 9px;
  padding: 0;
  border: 0;
  background: transparent;
  color: var(--project-shell-text);
  cursor: pointer;
}
.project-cover-header .project-header-context strong {
  font-size: 13px;
  font-weight: 700;
  white-space: nowrap;
}
.project-cover-header .project-header-context span {
  overflow: hidden;
  color: var(--project-shell-muted);
  font-size: 11px;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.project-header-date {
  color: var(--project-shell-muted);
  font-family: "Songti SC", Georgia, serif;
  font-size: 11px;
  font-style: normal;
  letter-spacing: .08em;
  white-space: nowrap;
}
.project-header-actions {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 4px;
}
.project-cover-header .project-header-context:focus-visible,
.project-cover-header .icon-button:focus-visible { outline: 2px solid rgba(255,255,255,.72); outline-offset: 3px; }
.app-frame:has(.projects-page) .projects-page { height: calc(100vh - 58px); }
.app-frame:has(.projects-page) .w1j-panel { top: 58px; }

.projects-heading h1.project-daily-line {
  font-family: "Songti SC", "Noto Serif SC", Georgia, serif;
  font-weight: 500;
}
.project-card .project-name,
.project-card:hover .project-name,
.project-card:focus-within .project-name,
.project-card.is-expanded .project-name {
  font-family: "Songti SC", Georgia, serif;
  font-weight: 600;
}
.projects-heading-aside .project-org-scope { gap: 4px; }
.projects-heading-aside .project-institute-tabs button {
  width: 32px;
  min-width: 32px;
  height: 32px;
  padding: 0 7px;
  font-size: 9px;
}
.projects-heading-aside .project-company-tabs { padding-left: 8px; }
.projects-heading-aside .project-company-tabs button {
  width: 27px;
  min-width: 27px;
  height: 32px;
  padding: 0 5px;
}
.projects-heading-aside .project-company-tabs button strong { font-size: 11px; }
.projects-heading-aside .project-scope-count { min-width: 22px; margin-left: 4px; margin-right: 3px; }

.project-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); }

@media (max-width: 1000px) {
  .project-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}

@media (max-width: 760px) {
  .project-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (max-width: 520px) {
  .project-grid { grid-template-columns: 1fr; }
}

/* W1-AV：项目画布采用直角内容对象；素材缩略图直接显示真实预览，不再套圆角占位卡。 */
.canvas-card,
.canvas-card.imported-canvas-object,
.group-layer,
.imported-canvas-object .group-layer,
.asset-real-preview,
.asset-generated-preview,
.asset-video-shell,
.asset-video-shell .asset-video,
.asset-video-poster,
.imported-single-image .canvas-real-image,
.material-item,
.material-thumb,
.material-thumb.has-image img,
.mthumb-stack,
.mthumb-col,
.mthumb-file,
.mthumb-card { border-radius: 0; }

.material-thumb.has-image { background: #e7e8e3; }
.material-thumb.has-image::before,
.material-thumb.has-image > i { display: none; }
.material-thumb.has-image img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* 标题贴住图面：只保留一行文字所需的 22px，不再预留 34px 空槽。 */
.imported-asset,
.imported-single-image { padding-bottom: 22px; }
.asset-real-preview,
.imported-single-image .canvas-real-image,
.asset-generated-preview,
.asset-video-shell { height: calc(100% - 22px); }
.asset-preview-frame { position: relative; width: 100%; height: calc(100% - 22px); }
.asset-preview-frame .asset-real-preview,
.asset-preview-frame .asset-generated-preview { width: 100%; height: 100%; }
.asset-preview-frame .asset-preview-fallback { display: none; }
.asset-preview-frame.preview-loading .asset-real-preview { visibility: hidden; }
.asset-preview-frame.preview-loading .asset-preview-fallback { display: block; }
.asset-preview-frame.preview-failed .asset-real-preview { display: none; }
.asset-preview-frame.preview-failed .asset-preview-fallback { display: block; }
.asset-preview-kind {
  position: absolute;
  left: 11px;
  top: 9px;
  z-index: 2;
  color: var(--u6-ink, #2f4439);
  font: 600 10px/1 Georgia, "Songti SC", serif;
  letter-spacing: .06em;
  pointer-events: none;
}
.asset-preview-frame.preview-failed .asset-preview-kind { display: none; }
/* 幻灯片卡片（W1-BP）：当前页/总页数角标 + 左右翻页按钮，滚轮翻页不缩放画布 */
.ppt-slide-frame .asset-real-preview { object-fit: contain; background: var(--u6-paper, #f7f7f2); }
.ppt-slide-badge {
  position: absolute; right: 8px; top: 9px; z-index: 3;
  background: rgba(35, 46, 40, .82); color: #fff; font-size: 9px;
  padding: 3px 8px; border-radius: 10px; pointer-events: none; letter-spacing: .04em;
}
.ppt-slide-nav { position: absolute; top: 0; left: 0; right: 0; height: calc(100% - 22px); z-index: 4; pointer-events: none; }
.ppt-slide-nav button {
  position: absolute; top: 50%; transform: translateY(-50%);
  width: 22px; height: 30px; border: 1px solid var(--u6-line, #d3d0c5);
  background: rgba(250, 249, 246, .94); border-radius: 6px; color: var(--u6-ink, #4d5a52);
  font-size: 15px; line-height: 1; cursor: pointer; pointer-events: auto;
  box-shadow: var(--sh-rest);
}
.ppt-slide-nav button:hover { background: var(--surface); }
.ppt-slide-nav button:first-child { left: -9px; }
.ppt-slide-nav button:last-child { right: -9px; }
.imported-object-caption {
  bottom: 2px;
  gap: 6px;
  line-height: 1.2;
}
/* W1-BV 的 PDF 卡「完整 PDF」备选按钮已按用户指正取消（CANVAS-POLISH-H1，2026-09-09）：
   按钮自 DOM/Tab 序移除，双击/翻页主交互不变；原样式随删，防留可聚焦控件。 */
.imported-canvas-object .group-stack { inset: 0 54px 44px 18px; }
.imported-canvas-object .group-page-nav { bottom: 26px; }

/* 无圆角组图靠前中后三级投影辨识层次：后层更浅更窄，前层更深，避免图面糊成一张。 */
.group-stack { isolation: isolate; }
.group-layer.gl-back.gl-b2 { z-index: 1; box-shadow: 0 2px 5px rgba(28, 35, 31, .16); }
.group-layer.gl-back.gl-b1 { z-index: 2; box-shadow: 0 5px 11px rgba(28, 35, 31, .20); }
.group-layer.gl-front { z-index: 3; box-shadow: 0 8px 16px rgba(28, 35, 31, .26); }
.group-count { z-index: 4; }
.imported-canvas-object .group-layer { box-shadow: none; }
.imported-canvas-object .group-layer.gl-back.gl-b2 { box-shadow: 0 2px 5px rgba(28, 35, 31, .16); }
.imported-canvas-object .group-layer.gl-back.gl-b1 { box-shadow: 0 5px 11px rgba(28, 35, 31, .20); }
.imported-canvas-object .group-layer.gl-front { box-shadow: 0 8px 16px rgba(28, 35, 31, .26); }

/* W1-AW：Muse 式低存在感画布页眉，与封面页页眉分开。
   WORKSPACE-SHELL-C（用户裁决）：页眉为极薄覆盖层常显（28px 起点、小字 11px、SVG 14px、热区≥24px），
   不再占据布局流；stage 真正铺满视口四边；左 rail 同样覆盖化（见 WORKSPACE-SHELL-C 块）。
   只作用于 :has(.canvas-shell) 的画布页——项目列表页页眉/布局完全不变。 */
/* UI E：画布页取消整条 28px 页眉表面——无底色/无模糊/无阴影，stage 铺到 y=0；
   顶中带空白指针穿透到画布（header pointer-events:none），只有左右交互子元素恢复接收事件；
   编辑态不得由页眉自身背景在顶部制造截断带。 */
.app-frame:has(.canvas-shell) .app-header {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  height: 28px;
  padding: 0 8px;
  background: transparent;
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
  border-bottom: 0;
  box-shadow: none;
  pointer-events: none;
}
.app-frame:has(.canvas-shell) .brand-mark.brand-mark-transparent {
  width: auto;
  height: auto;
  margin-right: 6px;
  border-radius: 0;
  background: transparent;
  color: var(--u6-ink-soft, #6b6e66);
  font-size: 12px;
  display: inline-flex;
  align-items: center;
  pointer-events: auto;
}
.app-frame:has(.canvas-shell) .header-path,
.app-frame:has(.canvas-shell) .header-pill { pointer-events: auto; }
/* CANVAS-POLISH-H2（用户截图：组标题与路径叠字）：路径钮自身加不透明局部底色（随内容宽、
   长名沿 max-width 省略），保证下层文字不可辨；不恢复整条页眉底板，中段仍穿透。 */
.app-frame:has(.canvas-shell) .header-path {
  border: 0;
  background: var(--u6-paper, #efeee8);
  padding: 2px 6px;
  border-radius: 6px;
  font-size: 11px;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  min-width: 0;
  max-width: 46vw;
  color: var(--u6-ink-soft, #6b6e66);
}
.app-frame:has(.canvas-shell) .header-path:hover .project-title { color: var(--u6-ink, #20211f); }
.app-frame:has(.canvas-shell) .header-path .slash { margin: 0 4px; font-size: 9px; color: var(--u6-ink-mute, #b2b2ac); }
.app-frame:has(.canvas-shell) .header-path .project-title { font-size: 11px; font-weight: 620; color: var(--u6-ink, #43463f); min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.app-frame:has(.canvas-shell) .header-pill {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  height: 28px;
  padding: 0 6px;
  border-radius: 0 0 10px 10px;
  background: rgba(250, 249, 246, .72); /* 独立紧凑胶囊：表面只属于自身，不横贯整条页眉 */
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  box-shadow: 0 1px 0 rgba(28, 38, 33, .10);
}
.app-frame:has(.canvas-shell) .crumb { padding: 4px 5px; font-size: 10px; }
.app-frame:has(.canvas-shell) .slash { margin: 0 2px; font-size: 9px; }
.app-frame:has(.canvas-shell) .project-title { font-size: 11px; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.app-frame:has(.canvas-shell) .sync { margin-right: 8px; font-size: 9px; }
.app-frame:has(.canvas-shell) .sync span { width: 5px; height: 5px; margin-right: 5px; }
.app-frame:has(.canvas-shell) .icon-button { width: 24px; height: 24px; border-radius: 4px; } /* 热区≥24px */
.app-frame:has(.canvas-shell) .icon-button svg { width: 14px; height: 14px; }
.app-frame:has(.canvas-shell) .personnel-main-avatar { width: 22px; height: 22px; font-size: 8px; }
.app-frame:has(.canvas-shell) .personnel-presence-preview { top: 30px; }
.app-frame:has(.canvas-shell) .canvas-shell { height: 100vh; }
.app-frame:has(.canvas-shell) .personnel-panel,
.app-frame:has(.canvas-shell) .w1j-panel { top: 28px; }
/* 纯内容浮层一律铺到 y=0：普通薄页眉绝不压在图片/查看器内容上（z-order 已高于页眉）。 */
.app-frame:has(.canvas-shell) .editor-layer,
.app-frame:has(.canvas-shell) .ppt-viewer,
.group-viewer { inset: 0; }

/* 不同资料属性使用不同文字层级：组图只在图外留名称，文件类保留“类型在图内、文件名在图外”。 */
.caption-group {
  left: 18px;
  right: 54px;
  bottom: 1px;
  min-height: 18px;
  align-items: center;
  z-index: 5;
}
.caption-group strong { font-size: 10px; font-weight: 600; }
.caption-asset { left: 0; right: 0; bottom: 1px; }
.caption-archive strong,
.caption-cad strong,
.caption-video strong { color: var(--u6-ink, #2d342f); }

/* 组图右侧只留一个不压图的数字入口。 */
.group-expand-pill {
  right: 2px;
  top: 50%;
  width: 40px;
  height: 40px;
  min-height: 40px;
  padding: 0;
  transform: translateY(-50%);
  border-radius: 0;
  background: transparent;
  color: var(--u6-ink, #4c5550);
  z-index: 6;
}
.group-expand-pill:hover,
.group-expand-pill:focus-visible { background: rgba(225, 226, 220, .72); }
.group-expand-pill b { margin: 0; font-size: 14px; font-weight: 650; }

/* 自动摊开的项目文件属于原始资料组，不再沿用新项目模板的“概念探索”。 */
.group-frame { pointer-events: none; }
.group-frame-source {
  border-color: color-mix(in srgb, var(--u6-pick, #5c7e6b) 72%, transparent);
  border-radius: 9px;
  background: color-mix(in srgb, var(--u6-pick, #6f8f7c) 3.5%, transparent);
}
.group-frame-source span {
  top: -23px;
  padding: 4px 7px;
  border-radius: 3px;
  background: var(--u6-dark, #718b7c);
  font-size: 9px;
}

/* W1-BV Task 2：真实画布容器组（交互容器；与图片堆卡片严格分离，渲染带 data-canvas-group） */
/* 关键：框身 z-index 保持 auto（不建 stacking context，卡片 z2 仍压在框身上方 → 成员卡可正常操作）；
   同时标题/手柄的 z-index 直接与卡片同级竞争并高于卡片 → 卡片重叠标题区时真实指针仍命中标题/操作入口。 */
.group-frame { pointer-events: auto; z-index: auto; }
.group-frame:hover { border-color: rgba(var(--g-c, 92, 126, 107), .95); }
/* Fix1/BREAK4：选中框边/光晕随组色（--g-c 由 .group-frame-color-* 注入），非固定 sage #5a7a68 */
.group-frame.selected { border-style: solid; border-color: rgba(var(--g-c, 92, 126, 107), .95); box-shadow: 0 0 0 3px rgba(var(--g-c, 92, 126, 107), .18), var(--sh-lift); }
.group-frame.locked { border-style: dotted; }
.group-frame.collapsed { border-style: dashed; }
.group-frame-head {
  position: absolute;
  left: 10px;
  bottom: 100%;           /* GROUP-INSIGHT-P2：组头整行外置于组边框上沿，不压组内 */
  margin-bottom: 8px;
  z-index: 8; /* 高于组理解抽屉 z7：top 停靠展开时组名仍可见可改名；低于四边钮 z9 */
  display: flex;
  align-items: center;
  gap: 8px;
  max-width: none;
  white-space: nowrap;
  pointer-events: none;
}
.group-frame-head .group-frame-label {
  position: static;
  display: inline-block;
  max-width: 220px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  cursor: pointer;
  pointer-events: auto;
}
.group-frame-head .group-frame-count {
  position: static;
  background: rgba(255, 255, 255, .72);
  color: var(--u6-ink-soft, #6f7f76);
  font-size: 9px;
  padding: 3px 6px;
  border-radius: 4px;
}
/* U2 四边组抽屉：每个边中点一个原生按钮；独立命中区 hover/键盘 focus 才显露（opacity，不用 display:none → Tab 可聚焦）。
   开态：该停靠边按钮常显、箭头向内（指向组内=收回）；收起态：全部箭头向外。 */
.group-insight-edge-toggle {
  position: absolute;
  z-index: 9; /* 高于组理解抽屉 z7：停靠该边时箭头仍可见可点，不被面板盖住 */
  width: 26px;
  height: 26px;
  margin: 0;
  padding: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 1px solid rgba(var(--g-c, 92, 126, 107), .6);
  border-radius: 50%;
  background: rgba(255, 255, 255, .92);
  color: var(--u6-pick, #3c6e53);
  font-size: 13px;
  font-weight: 650;
  line-height: 1;
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  cursor: pointer;
  pointer-events: auto;
  opacity: 0;
}
.group-insight-edge-toggle[data-group-insight-direction="left"] { left: 0; top: 50%; transform: translate(-50%, -50%); }
.group-insight-edge-toggle[data-group-insight-direction="right"] { right: 0; top: 50%; transform: translate(50%, -50%); }
.group-insight-edge-toggle[data-group-insight-direction="top"] { top: 0; left: 50%; transform: translate(-50%, -50%); }
.group-insight-edge-toggle[data-group-insight-direction="bottom"] { bottom: 0; left: 50%; transform: translate(-50%, 50%); }
.group-insight-edge-toggle:hover,
.group-insight-edge-toggle:focus-visible,
.group-insight-edge-toggle.on { opacity: 1; }
.group-insight-edge-toggle:hover { background: rgba(var(--g-c, 92, 126, 107), .2); color: var(--u6-ink, #22352a); }
.group-insight-edge-toggle.on { background: rgba(var(--g-c, 92, 126, 107), .22); color: var(--u6-ink, #1c2f24); }
.group-insight-edge-toggle:focus-visible { outline: 2px solid rgba(var(--g-c, 92, 126, 107), .85); outline-offset: 1px; }
/* GROUP-INSIGHT-P2/U2 Task 1 停靠几何（不改 g.x/y/w/h；right 镜像 left、bottom 镜像 top）：
   left/right：面板宽 480、高占满组主体（top:0/bottom:0），无缝贴合组左右；
   top/bottom：面板高 420、宽占满组主体（left:0/right:0），无缝贴合组上下；
   内部均 overflow-y 滚动，不扩大组几何。 */
.group-insight-drawer {
  position: absolute;
  box-sizing: border-box;
  padding: 10px 12px;
  overflow-y: auto;
  background: var(--u6-paper, #fbfaf7); /* R3：面板独立浅实底（alpha=1）。原为组色半透明填充（组框连续延伸观感），Codex 目视判定为“透明组底”；表卡是浅实底，面板也应为独立浅实阅读面 */
  border: 1px solid rgba(var(--g-c, 92, 126, 107), .6);
  border-radius: 8px;
  box-shadow: none;
  z-index: 7; /* 悬于组头/卡片之上（组头 z8、卡片 z2）；四边钮 z9 在面板之上保持可点 */
  pointer-events: auto;
  font-size: 11px;
  line-height: 1.5;
  color: var(--u6-ink, #2d342f);
  text-align: left;
}
/* UI-B①：侧向展开宽度 480→340 画布单位（合同 320–360 建议值，截图可读性核验）；上下抽屉语义不动 */
.group-insight-drawer[data-group-insight-dock="left"],
.group-insight-drawer[data-group-insight-dock="right"] { top: 0; bottom: 0; width: 340px; max-height: none; margin: 0; }
.group-insight-drawer[data-group-insight-dock="top"],
.group-insight-drawer[data-group-insight-dock="bottom"] { left: 0; right: 0; width: auto; height: 420px; max-height: none; margin: 0; }
.group-insight-drawer[data-group-insight-dock="left"] { right: 100%; }
.group-insight-drawer[data-group-insight-dock="right"] { left: 100%; }
.group-insight-drawer[data-group-insight-dock="top"] { bottom: 100%; }
.group-insight-drawer[data-group-insight-dock="bottom"] { top: 100%; }
/* 接缝：面板贴组框该侧直角（组框接缝角同去圆角）；dock 侧边线自 UI-B① 起保留作 1px 组色交界分隔。 */
/* UI-B①：停靠交界补 1px 组色细分隔（基础 border 提供实线/颜色），圆角贴合保持；不再抹掉 dock 边线 */
.group-insight-drawer[data-group-insight-dock="left"] { border-top-right-radius: 0; border-bottom-right-radius: 0; }
.group-insight-drawer[data-group-insight-dock="right"] { border-top-left-radius: 0; border-bottom-left-radius: 0; }
.group-insight-drawer[data-group-insight-dock="top"] { border-bottom-left-radius: 0; border-bottom-right-radius: 0; }
.group-insight-drawer[data-group-insight-dock="bottom"] { border-top-left-radius: 0; border-top-right-radius: 0; }
.group-frame:has(> .group-insight-drawer[data-group-insight-dock="left"]) { border-top-left-radius: 0; border-bottom-left-radius: 0; }
.group-frame:has(> .group-insight-drawer[data-group-insight-dock="right"]) { border-top-right-radius: 0; border-bottom-right-radius: 0; }
.group-frame:has(> .group-insight-drawer[data-group-insight-dock="top"]) { border-top-left-radius: 0; border-top-right-radius: 0; }
.group-frame:has(> .group-insight-drawer[data-group-insight-dock="bottom"]) { border-bottom-left-radius: 0; border-bottom-right-radius: 0; }
.group-insight-drawer h4 {
  margin: 0 0 3px;
  font-size: 10px;
  letter-spacing: .02em;
  color: var(--u6-pick, #3c6e53);
  font-weight: 650;
}
.group-insight-drawer .gi-section { margin-bottom: 8px; padding-bottom: 8px; border-bottom: 1px dashed color-mix(in srgb, var(--u6-pick, #6f8f7c) 28%, transparent); }
.group-insight-drawer .gi-section:last-child { margin-bottom: 0; padding-bottom: 0; border-bottom: none; }
.group-insight-drawer .gi-total { font-size: 19px; font-weight: 650; color: var(--u6-pick, #3c6e53); line-height: 1.15; }
.group-insight-drawer .gi-line { margin-top: 3px; color: var(--u6-ink, #4c5550); }
.group-insight-drawer .gi-bad { color: var(--u6-flag, #b0563c); font-weight: 650; }
.group-insight-drawer .gi-chips { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 5px; }
.group-insight-drawer .gi-chip {
  background: var(--u6-paper, #edf2ee);
  border: 1px solid var(--u6-line, #dbe6df);
  color: var(--u6-pick, #3c6e53);
  font-size: 9px;
  padding: 2px 6px;
  border-radius: 10px;
}
.group-insight-drawer .gi-row { margin-top: 4px; }
.group-insight-drawer .gi-row i { display: block; font-style: normal; color: var(--u6-ink-soft, #6f7f76); }
.group-insight-drawer .gi-sub { margin-top: 2px; }
.group-insight-drawer .gi-sub span { display: block; color: var(--u6-ink-soft, #6f7f76); }
.group-insight-drawer .gi-note { color: var(--u6-ink-soft, #6f7f76); }
.group-insight-drawer .gi-note.gi-run { color: var(--u6-pick, #3c6e53); }
.group-insight-drawer .gi-note.gi-err { color: var(--u6-flag, #b0563c); }
/* ---- P2/Task2 P14 六组只读指标表 + 单行候选展开（纯显示层；行点击只切换 DOM hidden，零持久化）---- */
.group-insight-drawer .gi-p14 { min-width: 0; }
/* styles.css 的 `.group-frame span` 会把抽屉内全部 span 变 absolute → P14 网格单元格塌陷；此处只对本表 span 归位为正常流 */
.group-frame .gi-p14 span { position: static; }
.group-insight-drawer .gi-p14-hint { margin: 1px 0 5px; font-size: 9.5px; color: var(--u6-ink-soft, #7c8a82); }
.group-insight-drawer .gi-p14-table { display: block; }
.group-insight-drawer .gi-p14-gname {
  margin: 5px 0 1px;
  font-size: 10px;
  font-weight: 650;
  color: var(--u6-pick, #3c6e53);
  letter-spacing: .5px;
}
.group-insight-drawer .gi-p14-tr {
  display: grid;
  grid-template-columns: 24px minmax(0, 1fr) auto 38px minmax(0, 1fr);
  column-gap: 5px;
  align-items: center;
  line-height: 1.3;
}
.group-insight-drawer .gi-p14-head {
  font-size: 9px;
  color: var(--u6-ink-soft, #7c8a82);
  border-bottom: 1px solid rgba(var(--g-c, 92, 126, 107), .55); /* UI-B①：表头底线随组色 */
  padding-bottom: 2px;
  margin-bottom: 2px;
}
.group-insight-drawer .gi-p14-row {
  cursor: pointer;
  border-radius: 4px;
  padding: 1px 2px;
  margin: 0 -2px;
  border-top: 1px solid rgba(var(--g-c, 92, 126, 107), .28); /* UI-B①：行分隔 1px（同色相淡线，明确表格线不靠 hover 背景暗示） */
}
/* UI-B①：列边界细线（编号|名称|采用值 单元格右缘），备注列不加保持透气 */
.group-insight-drawer .gi-p14-row > .gi-p14-seq,
.group-insight-drawer .gi-p14-row > .gi-p14-name,
.group-insight-drawer .gi-p14-row > .gi-p14-val { border-right: 1px solid rgba(var(--g-c, 92, 126, 107), .22); padding-right: 5px; }
.group-insight-drawer .gi-p14-row:hover { background: rgba(var(--g-c, 92, 126, 107), .08); } /* 选择动作色随组 */
.group-insight-drawer .gi-p14-row[data-row-state="conflict"] .gi-p14-val { color: var(--u6-gold, #a06a20); font-weight: 650; }
.group-insight-drawer .gi-p14-row[data-row-state="missing"] .gi-p14-val { color: var(--u6-flag, #b0563c); font-weight: 650; }
.group-insight-drawer .gi-p14-row .gi-p14-seq { color: var(--u6-ink-soft, #8a9690); font-variant-numeric: tabular-nums; }
.group-insight-drawer .gi-p14-name { font-weight: 500; color: var(--u6-ink, #34423b); overflow-wrap: anywhere; }
.group-insight-drawer .gi-p14-val { font-variant-numeric: tabular-nums; color: var(--u6-pick, #3c6e53); font-weight: 600; text-align: right; white-space: nowrap; }
.group-insight-drawer .gi-p14-unit { color: var(--u6-ink-soft, #6f7f76); font-size: 9.5px; }
.group-insight-drawer .gi-p14-note { color: var(--u6-ink-soft, #6f7f76); font-size: 9.5px; overflow-wrap: anywhere; }
.group-insight-drawer .gi-p14-expand {
  margin: 1px 0 3px;
  padding: 4px 6px;
  background: rgba(var(--g-c, 92, 126, 107), .07); /* UI-B①：展开面动作色随组（告警语义色不动） */
  border-left: 2px solid rgba(var(--g-c, 92, 126, 107), .8);
  border-radius: 0 4px 4px 0;
  font-size: 9.8px;
  color: var(--u6-ink, #3d453f);
}
.group-insight-drawer .gi-p14-expand[data-gi-p14-state="conflict"] { border-left-color: var(--u6-gold, #a06a20); }
.group-insight-drawer .gi-p14-expand[data-gi-p14-state="missing"] { border-left-color: var(--u6-flag, #b0563c); }
.group-insight-drawer .gi-p14-state-line { font-weight: 650; color: var(--u6-pick, #3c6e53); margin-bottom: 2px; }
.group-insight-drawer .gi-p14-line { margin: 2px 0; color: var(--u6-ink, #4c5550); }
.group-insight-drawer .gi-p14-line.gi-p14-caution { color: var(--u6-gold, #a06a20); }
.group-insight-drawer .gi-p14-cand { margin: 3px 0; }
.group-insight-drawer .gi-p14-cand-head { display: flex; flex-wrap: wrap; gap: 3px 8px; align-items: baseline; }
.group-insight-drawer .gi-p14-cand-head b { color: var(--u6-ink, #34423b); }
.group-insight-drawer .gi-p14-diff { color: var(--u6-gold, #a06a20); font-size: 9.5px; }
.group-insight-drawer .gi-p14-src { display: flex; flex-wrap: wrap; gap: 3px 6px; align-items: baseline; padding-left: 8px; }
.group-insight-drawer .gi-p14-src span { color: var(--u6-ink, #4c5550); }
.group-insight-drawer .gi-p14-src i.gi-p14-loc { font-style: normal; color: var(--u6-ink-soft, #8a9690); font-size: 9px; }
.group-insight-drawer .gi-p14-extras { margin-top: 2px; font-size: 9.8px; }
.group-insight-drawer .gi-p14-extras summary { cursor: pointer; color: var(--u6-ink-soft, #6f7f76); font-weight: 600; }

/* 折叠的紧凑容器表达：小框内 label + N 项 + 代表预览/摘要（仅显示层，持久几何不变） */
.group-frame.collapsed .group-frame-compact-body {
  position: absolute;
  top: 34px;
  left: 12px;
  right: 12px;
  bottom: 12px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 7px;
  pointer-events: none;
}
.group-frame.collapsed .group-frame-preview {
  width: 150px;
  height: 84px;
  border-radius: 8px;
  overflow: hidden;
  background: rgba(255, 255, 255, .5);
  display: grid;
  place-items: center;
  color: rgba(90, 110, 100, .55);
  font-size: 30px;
}
.group-frame.collapsed .group-frame-preview img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.group-frame.collapsed .group-frame-summary {
  font-size: 10px;
  color: rgba(70, 80, 74, .85);
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.group-frame-resize {
  position: absolute;
  right: -6px;
  bottom: -6px;
  width: 14px;
  height: 14px;
  border-radius: 4px;
  background: var(--u6-pick, #5a7a68);
  border: 2px solid var(--u6-line, #fbfaf7);
  z-index: 6;
  cursor: nwse-resize;
  box-shadow: 0 1px 4px rgba(0, 0, 0, .28);
}
.group-frame-resize:after {
  content: "";
  position: absolute;
  right: 3px;
  bottom: 3px;
  width: 4px;
  height: 4px;
  border-right: 1.5px solid var(--surface);
  border-bottom: 1.5px solid var(--surface);
}
/* W1-BV：卡片右下角缩放手柄——仅单选显示（JS 通过 hidden 切换出现），与组框 .group-frame-resize 明确隔离 */
.card-resize-handle {
  position: absolute;
  right: -6px;
  bottom: -6px;
  width: 14px;
  height: 14px;
  border-radius: 4px;
  background: var(--u6-pick, #5a7a68);
  border: 2px solid var(--u6-line, #fbfaf7);
  z-index: 8;
  cursor: nwse-resize;
  box-shadow: 0 1px 4px rgba(0, 0, 0, .28);
}
.card-resize-handle[hidden] { display: none; }
.card-resize-handle:after {
  content: "";
  position: absolute;
  right: 3px;
  bottom: 3px;
  width: 4px;
  height: 4px;
  border-right: 1.5px solid var(--surface);
  border-bottom: 1.5px solid var(--surface);
}
.group-frame-color-sage { background: rgba(92, 126, 107, var(--g-opacity, .08)); border-color: color-mix(in srgb, var(--u6-pick, #5c7e6b) 72%, transparent); --g-c: 92, 126, 107; }
.group-frame-color-amber { background: rgba(196, 150, 63, var(--g-opacity, .08)); border-color: color-mix(in srgb, var(--u6-gold, #c4963f) 72%, transparent); --g-c: 196, 150, 63; }
.group-frame-color-sky { background: rgba(90, 142, 168, var(--g-opacity, .08)); border-color: rgba(90, 142, 168, .72); --g-c: 90, 142, 168; }
.group-frame-color-rose { background: rgba(178, 106, 116, var(--g-opacity, .08)); border-color: color-mix(in srgb, var(--u6-flag, #b26a74) 72%, transparent); --g-c: 178, 106, 116; }
.group-frame-color-violet { background: rgba(126, 114, 178, var(--g-opacity, .08)); border-color: rgba(126, 114, 178, .72); --g-c: 126, 114, 178; }
.group-rename-input {
  position: absolute;
  top: 4px;
  left: 8px;
  z-index: 6;
  min-width: 130px;
  font-size: 11px;
  padding: 3px 7px;
  border: 1px solid var(--u6-pick-deep, #5a7a68);
  border-radius: 5px;
  background: var(--surface);
}

/* W1-AX：卡片溯源层是安静的第二行，不用新的卡片框抢图面。 */
.imported-object-caption {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: start;
  column-gap: 8px;
}
.imported-object-caption .caption-identity {
  position: relative;
  min-width: 0;
}
.imported-object-caption .caption-identity strong {
  display: block;
}
.imported-object-caption .caption-provenance {
  position: absolute;
  top: calc(100% + 2px);
  left: 0;
  opacity: 0;
  color: var(--u6-ink-soft, #9da099);
  font-size: 7px;
  font-variant-numeric: tabular-nums;
  letter-spacing: .015em;
  pointer-events: none;
  transition: opacity .12s ease, color .12s ease;
  white-space: nowrap;
}
.imported-canvas-object:hover .caption-provenance,
.imported-canvas-object:focus-within .caption-provenance {
  opacity: 1;
  color: var(--u6-ink-soft, #6f756f);
}
.imported-asset,
.imported-single-image { padding-bottom: 22px; }
.asset-real-preview,
.imported-single-image .canvas-real-image,
.asset-generated-preview,
.asset-video-shell { height: 100%; }
.asset-preview-frame { height: 100%; }
.caption-group {
  min-height: 30px;
  align-items: baseline;
}
.imported-canvas-object .group-stack { inset: 0 54px 52px 18px; }

/* CAD 查看器：与 Muse 式工作台同一密度，直角、少动效、图面优先。 */
.cad-viewer {
  position: fixed;
  inset: 0; /* SHELL-C：画布铺满后查看器纯内容到顶（薄页眉不压内容） */
  z-index: 46;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
  background: rgba(25, 29, 27, .86);
}
.cad-viewer-panel {
  width: min(94vw, 1580px);
  height: min(90vh, 980px);
  max-height: calc(100vh - 78px);
  display: grid;
  grid-template-rows: 56px minmax(0, 1fr) 28px;
  overflow: hidden;
  border: 1px solid rgba(255, 255, 255, .18);
  background: var(--u6-paper, #e8e9e4);
  box-shadow: var(--sh-pop);
}
.cad-viewer-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 20px;
  padding: 0 10px 0 16px;
  border-bottom: 1px solid var(--u6-line, #c8cbc5);
  background: var(--u6-paper, #f1f1ed);
}
.cad-viewer-head > div:first-child { min-width: 0; }
.cad-viewer-head span,
.cad-viewer-head strong,
.cad-viewer-head small { display: block; }
.cad-viewer-head > div:first-child > span { margin-bottom: 2px; color: var(--u6-ink-soft, #69716c); font-size: 8px; letter-spacing: .12em; }
.cad-viewer-head strong { overflow: hidden; color: var(--u6-ink, #292e2b); font-size: 11px; font-weight: 650; text-overflow: ellipsis; white-space: nowrap; }
.cad-viewer-head small { margin-top: 2px; color: var(--u6-ink-soft, #969a95); font-size: 8px; font-variant-numeric: tabular-nums; }
.cad-viewer-tools { display: flex; align-items: center; gap: 4px; flex: 0 0 auto; }
.cad-viewer-tools button {
  min-width: 32px;
  height: 32px;
  padding: 0 10px;
  border: 1px solid var(--u6-line, #c9ccc6);
  border-radius: 0;
  background: var(--u6-paper, #f8f8f5);
  color: var(--u6-ink, #3d4540);
  font-size: 9px;
  cursor: pointer;
  transition: background-color .16s ease, color .16s ease, border-color .16s ease;
}
.cad-viewer-tools button:hover { border-color: var(--u6-line, #9da59f); background: var(--surface); }
.cad-viewer-tools button:active { background: var(--u6-paper, #e4e6e1); }
.cad-viewer-tools button:focus-visible { outline: 2px solid var(--u6-line, #688473); outline-offset: 2px; }
.cad-viewer-tools button:disabled { opacity: .48; cursor: wait; }
.cad-viewer-tools .cad-zoom-value { min-width: 54px; font-variant-numeric: tabular-nums; }
.cad-viewer-tools .cad-primary-action { border-color: var(--u6-line, #304a3d); background: var(--u6-dark, #304a3d); color: var(--u6-gold, #f0cc72); }
.cad-viewer-tools .cad-primary-action:hover { border-color: var(--u6-pick-deep, #3e5d4d); background: var(--u6-pick-deep, #3e5d4d); }
.cad-tool-separator { width: 1px; height: 20px; margin: 0 4px; background: var(--u6-wash, #c9ccc6); }
.cad-viewer-stage {
  position: relative;
  min-height: 0;
  overflow: hidden;
  background: var(--u6-dark, #1e1e1e);
}
.open-cad-frame {
  display: block;
  width: 100%;
  height: 100%;
  border: 0;
  background: var(--u6-dark, #1e1e1e);
}
.cad-viewer-document {
  position: absolute;
  inset: 0;
  transform-origin: center center;
  will-change: transform;
}
.cad-viewer-document img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: contain;
  user-select: none;
  -webkit-user-drag: none;
}
.cad-viewer-document .cad-vector-canvas {
  position: absolute;
  left: 50%;
  top: 50%;
  display: block;
  max-width: none;
  max-height: none;
  background: var(--surface);
  transform: translate(-50%, -50%);
  user-select: none;
}
.cad-viewer-document.cad-vector-ready img { visibility: hidden; }
.cad-card-snapshot { overflow: hidden; }
.cad-card-snapshot img { display: block; width: 100%; height: 100%; object-fit: contain; }
.cad-card-snapshot > span { position: absolute; left: 10px; top: 8px; }
.cad-viewer-fallback {
  position: absolute;
  inset: 0;
  display: none;
  place-content: center;
  justify-items: center;
  gap: 8px;
  padding: 32px;
  color: var(--u6-ink-soft, #68716b);
  text-align: center;
}
.cad-viewer-fallback strong { color: var(--u6-ink, #39423d); font-size: 12px; }
.cad-viewer-fallback span { max-width: 520px; font-size: 9px; line-height: 1.65; }
.cad-viewer-stage.preview-failed .cad-viewer-document { display: none; }
.cad-viewer-stage.preview-failed .cad-viewer-fallback { display: grid; }
.cad-viewer-stage.preview-loading { cursor: progress; }
.cad-viewer-stage.preview-loading .cad-viewer-document { display: none; }
.cad-viewer-stage.preview-loading .cad-viewer-fallback { display: grid; }
.cad-viewer-foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0 14px;
  border-top: 1px solid var(--u6-line, #c8cbc5);
  background: var(--u6-paper, #ecece7);
  color: var(--u6-ink-soft, #858b86);
  font-size: 8px;
}
@media (max-width: 1280px) {
  .cad-viewer-panel { grid-template-rows: 88px minmax(0, 1fr) 28px; }
  .cad-viewer-head { align-items: flex-start; flex-direction: column; justify-content: center; gap: 6px; padding-block: 7px; }
  .cad-viewer-tools { width: 100%; justify-content: flex-end; }
}
@media (max-width: 900px) {
  .cad-viewer { padding: 10px; }
  .cad-viewer-panel { width: 100%; max-height: calc(100vh - 62px); grid-template-rows: 96px minmax(0, 1fr) 28px; }
  .cad-viewer-head { align-items: flex-start; flex-direction: column; gap: 6px; padding: 8px; }
  .cad-viewer-tools { width: 100%; overflow-x: auto; }
  .cad-viewer-foot span:last-child { display: none; }
}
@media (prefers-reduced-motion: reduce) {
  .cad-viewer-tools button { transition: none; }
}

/* 文件查看遵循工作软件规则：双击进入查看器，下载只能由独立命令触发。 */
.asset-viewer {
  position: fixed;
  inset: 0; /* SHELL-C：同上，铺到 y=0 */
  z-index: 45;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
  background: rgba(22, 25, 23, .84);
}
.asset-viewer-panel {
  width: min(92vw, 1480px);
  height: min(88vh, 940px);
  display: grid;
  grid-template-rows: 54px minmax(0, 1fr) 28px;
  overflow: hidden;
  border: 1px solid var(--u6-line, #bfc2bc);
  border-radius: 0;
  background: var(--u6-paper, #eeeee9);
  box-shadow: var(--sh-pop);
}
.asset-viewer-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 18px;
  padding: 7px 12px;
  border-bottom: 1px solid var(--u6-line, #c8cbc5);
  background: var(--u6-paper, #ecece7);
}
.asset-viewer-head > div { min-width: 0; }
.asset-viewer-head span,
.asset-viewer-head strong,
.asset-viewer-head small { display: block; }
.asset-viewer-head span { color: var(--u6-ink-soft, #69716c); font-size: 8px; letter-spacing: .1em; }
.asset-viewer-head strong { overflow: hidden; color: var(--u6-ink, #292e2b); font-size: 11px; text-overflow: ellipsis; white-space: nowrap; }
.asset-viewer-head small { margin-top: 2px; color: var(--u6-ink-soft, #929792); font-size: 8px; }
.asset-viewer-head button { width: 30px; height: 30px; border: 1px solid transparent; background: transparent; color: var(--u6-ink-soft, #606762); cursor: pointer; }
.asset-viewer-head button:hover { border-color: var(--u6-line, #b8bdb7); background: var(--u6-paper, #f8f8f4); }
.asset-viewer-stage { position: relative; min-height: 0; display: grid; place-items: center; overflow: hidden; background: var(--u6-dark, #1a1e1b); }
.asset-viewer-stage img,
.asset-viewer-stage video { display: block; max-width: 100%; max-height: 100%; object-fit: contain; }
.asset-viewer-stage iframe { width: 100%; height: 100%; border: 0; background: var(--surface); }
.asset-viewer-empty { display: grid; justify-items: center; gap: 7px; color: var(--u6-ink-soft, #9aa19c); text-align: center; }
.asset-viewer-empty strong { color: #e5e8e4; font-size: 12px; }
.asset-viewer-empty span { font-size: 9px; }
.asset-viewer-foot { display: flex; align-items: center; justify-content: space-between; padding: 0 14px; border-top: 1px solid var(--u6-line, #c8cbc5); color: var(--u6-ink-soft, #858b86); font-size: 8px; }

.card-rename-input {
  min-width: 0;
  width: min(100%, 260px);
  height: 20px;
  border: 0;
  border-bottom: 1px solid var(--u6-line, #506d5e);
  border-radius: 0;
  outline: 0;
  background: rgba(255, 255, 252, .96);
  color: var(--u6-ink, #232824);
  font: inherit;
  font-size: 10px;
}

/* OpenCAD WebAssembly 在同一查看器壳内直接解析 DWG/DXF 并绘制 GPU 视口。 */
.cad-viewer-stage {
  background: var(--u6-dark, #1e1e1e);
}
.cad-viewer-document img { filter: invert(.92); }
.cad-viewer-document img.local-cad-preview { filter: none; }
.cad-viewer-fallback { color: var(--u6-ink-soft, #89938d); }
.cad-viewer-fallback strong { color: #e2e6e2; }
.imported-asset:has(.caption-cad) .asset-preview-frame { background: var(--u6-dark, #101311); }
.imported-asset:has(.caption-cad) .asset-preview-frame .asset-real-preview { filter: invert(.92); }
.imported-asset:has(.caption-cad) .asset-preview-frame .local-cad-preview { filter: none; object-fit: contain; background: var(--u6-paper, #f5f5f1); }

/* ============ U1 图片悬浮阵列（会话态比较层；refinement 内新增，不改既有规则） ============ */
.u1-layer {
  position: absolute; left: 0; top: 0; right: 0; bottom: 0;
  z-index: 14; pointer-events: none; overflow: hidden;
  contain: layout style;
}
.u1-layer.u1-scrollable { overflow-y: auto; overflow-x: hidden; }
.u1-f {
  position: absolute; left: 0; top: 0;
  pointer-events: auto;
  display: flex; flex-direction: column;
  background: transparent;
  border: 1px solid color-mix(in srgb, var(--u6-pick, #5c7e6b) 35%, transparent);
  border-radius: 8px;
  box-shadow: var(--sh-rest);
  overflow: hidden;
  cursor: grab; /* 默认整图即拖动柄；SVG 控件 hover 时不抢拖动 */
  will-change: transform, opacity;
  transition: transform .26s ease, opacity .18s ease;
}
.u1-f.u1-noanim { transition: none !important; }
.u1-f.u1-dragging { transition: none !important; cursor: grabbing; }
.u1-f.u1-pinned {
  border-color: var(--u6-pick-deep, #3c6e53);
  box-shadow: var(--sh-lift);
}
.u1-f.u1-hint { outline: 2px solid var(--u6-gold, #d9a441); outline-offset: -2px; }
/* 默认纯图：图片占满浮图，不留文件名/底部栏及其空间 */
.u1-f .u1-img {
  position: relative;
  flex: 1 1 auto; min-height: 0;
  display: flex; align-items: center; justify-content: center;
  padding: 0; background: var(--u6-paper, #f6f7f3);
}
.u1-f .u1-img img {
  width: 100%; height: 100%;
  object-fit: contain; display: block;
}
/* hover 本图 / 键盘 focus-within → 右上角显露原生 SVG 细线图标控件；离开即隐（指针事件随显隐切换） */
.u1-f .u1-ctlbar {
  position: absolute; top: 4px; right: 4px; z-index: 2;
  display: flex; align-items: center; gap: 4px;
  padding: 3px; border-radius: 8px;
  background: rgba(255, 255, 255, .82);
  box-shadow: var(--sh-rest);
  opacity: 0; pointer-events: none;
  transition: opacity .14s ease;
}
.u1-f:hover .u1-ctlbar,
.u1-f:focus-within .u1-ctlbar { opacity: 1; pointer-events: auto; }
.u1-f .u1-ctl {
  flex: 0 0 auto;
  display: inline-flex; align-items: center; justify-content: center;
  width: 22px; height: 22px; padding: 0;
  border-radius: 6px; border: 1px solid color-mix(in srgb, var(--u6-pick, #5c7e6b) 45%, transparent);
  background: var(--surface); color: var(--u6-ink, #2d342f); cursor: pointer;
}
.u1-f .u1-ctl .u1-ic { width: 13px; height: 13px; display: block; }
.u1-f .u1-ctl:hover { background: var(--u6-paper, #eef3ee); border-color: var(--u6-pick-deep, #3c6e53); }
.u1-f .u1-ctl[data-u1-action="close"] { color: var(--u6-flag, #8c3a3a); border-color: color-mix(in srgb, var(--u6-flag, #8c3a3a) 45%, transparent); }
.u1-f .u1-ctl[data-u1-action="close"]:hover { background: var(--u6-paper, #f8ecea); }
.u1-f .u1-ctl[data-u1-action="pin"][aria-pressed="true"] { background: var(--u6-paper, #dceadc); border-color: var(--u6-pick-deep, #3c6e53); color: var(--u6-pick-deep, #1f4a33); }
.u1-f .u1-ctl:focus-visible { outline: 2px solid color-mix(in srgb, var(--u6-pick, #3c6e53) 80%, transparent); outline-offset: 1px; }
.u1-f:focus-within { border-color: var(--u6-pick-deep, #3c6e53); }
.collection-real-image {
  width: 100%; height: 100%; object-fit: cover; display: block;
  border-radius: 4px;
}
.collection-image { display: flex; flex-direction: column; gap: 2px; }
.collection-image .collection-cap {
  display: flex; align-items: center; justify-content: space-between; gap: 4px;
  font-size: 10px; color: var(--u6-ink, #2d342f);
}
.collection-missing {
  display: flex; align-items: center; justify-content: center;
  min-height: 60px; border-radius: 4px;
  background: repeating-linear-gradient(45deg, var(--u6-paper, #eceeeb), var(--u6-paper, #eceeeb) 6px, var(--u6-paper, #e3e6e2) 6px, var(--u6-paper, #e3e6e2) 12px);
  color: var(--u6-ink-soft, #8a948e); font-size: 11px;
}
@media (prefers-reduced-motion: reduce) {
  .u1-f { transition: none !important; }
  .u1-f .u1-img img { transition: none !important; }
  .u1-f .u1-ctlbar { transition: none !important; }
}

/* ================= U2B 表格卡 + 抽屉选行引用（2026-09-08） ================= */

/* ---- 抽屉 P14 选择层：行勾选格默认隐藏（保持原五行排版），选择模式显示为前置列 ---- */
.group-insight-drawer .gi-p14-sel { display: none; align-items: center; justify-content: center; font-weight: 800; color: #fff; font-size: 9px; }
.group-insight-drawer .u2b-selmode .gi-p14-tr { grid-template-columns: 18px 24px minmax(0, 1fr) auto 38px minmax(0, 1fr); }
.group-insight-drawer .u2b-selmode .gi-p14-tr .gi-p14-sel { display: flex; }
.group-insight-drawer .gi-p14-row.sel { background: color-mix(in srgb, var(--u6-pick, #3c6e53) 16%, transparent); box-shadow: inset 2px 0 0 var(--u6-pick, #3c6e53); }
.group-insight-drawer .gi-p14-row.sel .gi-p14-sel { background: var(--u6-pick-deep, #3c6e53); border-radius: 3px; }
.group-insight-drawer .u2b-gsel { display: flex; align-items: center; gap: 4px; cursor: pointer; border-radius: 3px; width: max-content; }
.group-insight-drawer .u2b-gsel:hover { background: color-mix(in srgb, var(--u6-pick, #3c6e53) 10%, transparent); }
.group-insight-drawer .u2b-gsel .u2b-gsel-box { display: none; width: 13px; height: 13px; font-size: 9px; line-height: 13px; text-align: center; border: 1px solid var(--u6-line, #9fb4a6); border-radius: 3px; color: #fff; }
.group-insight-drawer .u2b-selmode .u2b-gsel .u2b-gsel-box { display: inline-block; }
.group-insight-drawer .u2b-gsel.sel .u2b-gsel-box { background: var(--u6-pick-deep, #3c6e53); border-color: var(--u6-pick-deep, #3c6e53); }

/* 行内短文字状态标记（不依赖颜色传达状态） */
.group-insight-drawer .gi-p14-state-tag,
.canvas-card.table-card .gi-p14-state-tag {
  display: inline-block; margin-left: 4px; font-size: 8px; line-height: 1.1; padding: 1px 4px;
  border-radius: 8px; background: var(--u6-paper, #eaf1ec); color: var(--u6-pick, #3c6e53); font-weight: 650; letter-spacing: .2px; vertical-align: 1px; font-style: normal;
}
.group-insight-drawer .gi-p14-state-tag[data-state="conflict"],
.canvas-card.table-card .gi-p14-state-tag[data-state="conflict"] { background: var(--u6-paper, #f6ecdc); color: var(--u6-gold, #a06a20); }
.group-insight-drawer .gi-p14-state-tag[data-state="missing"],
.canvas-card.table-card .gi-p14-state-tag[data-state="missing"] { background: var(--u6-paper, #f7e7e2); color: var(--u6-flag, #b0563c); }

/* 抽屉动作条 */
.group-insight-drawer .gi-p14-actions { display: flex; gap: 4px; align-items: center; flex-wrap: wrap; margin: 2px 0 3px; }
.group-insight-drawer .u2b-act { border: 1px solid var(--u6-line, #c4d2c8); background: var(--surface); color: var(--u6-pick, #3c6e53); font-size: 10px; line-height: 1; padding: 4px 7px; border-radius: 4px; cursor: pointer; font-weight: 600; }
.group-insight-drawer .u2b-act:hover:not([disabled]) { background: var(--u6-paper, #eef4ef); }
.group-insight-drawer .u2b-act[disabled] { opacity: .45; cursor: not-allowed; }
.group-insight-drawer .gi-p14-ro { color: var(--u6-flag, #b0563c); font-size: 9px; margin-left: 2px; }

/* ---- 表格卡：浅色不透底阅读面（组半透明填充绝不透出），栅格分隔、粘性表头、数值右对齐/指标名左对齐 ---- */
.canvas-card.table-card { background: var(--u6-paper, #fdfcf8); border: 1px solid var(--u6-line, #d9d2c4); border-radius: 8px; }
.canvas-card.table-card .u2b-tbl-card { display: flex; flex-direction: column; box-sizing: border-box; padding: 6px 8px 4px; color: var(--u6-ink, #2c3a32); background: var(--u6-paper, #fdfcf8); width: 100%; height: 100%; overflow: hidden; }
.canvas-card.table-card .u2b-prov { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 2px 10px; font-size: 9.5px; border-bottom: 1px dashed var(--u6-line, #e0d8c8); padding-bottom: 3px; margin-bottom: 3px; color: var(--u6-ink-soft, #5a655e); }
.canvas-card.table-card .u2b-pv { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.canvas-card.table-card .u2b-pv > span { color: var(--u6-ink-soft, #8a948e); font-size: 8px; letter-spacing: .4px; }
.canvas-card.table-card .u2b-pv b { font-weight: 650; color: var(--u6-ink, #34423b); overflow-wrap: anywhere; }
.canvas-card.table-card .u2b-pv small { color: var(--u6-ink-soft, #8a948e); font-size: 8.5px; overflow-wrap: anywhere; }
.canvas-card.table-card .u2b-files { display: flex; flex-wrap: wrap; gap: 2px 4px; }
.canvas-card.table-card .u2b-filesrc { background: var(--u6-paper, #f0ede5); border-radius: 3px; padding: 0 4px; font-size: 8.5px; color: var(--u6-ink, #4c5550); }
.canvas-card.table-card .u2b-miss { color: var(--u6-flag, #b0563c); font-weight: 600; font-style: normal; }
.canvas-card.table-card .u2b-live { font-size: 9px; line-height: 1.25; margin: 2px 0; color: var(--u6-ink-soft, #5a655e); min-height: 9px; }
.canvas-card.table-card .u2b-live-mk.u2b-ok { color: var(--u6-pick, #3c6e53); }
.canvas-card.table-card .u2b-live-mk.u2b-changed,
.canvas-card.table-card .u2b-live-mk.u2b-unknown { color: var(--u6-gold, #a06a20); }
.canvas-card.table-card .u2b-scroll { overflow: auto; border: 1px solid var(--u6-line, #e7e2d6); border-radius: 5px; background: var(--surface, #fffef9); }
.canvas-card.table-card table.u2b-tbl { border-collapse: separate; border-spacing: 0; width: 100%; min-width: 520px; font-size: 10px; }
.canvas-card.table-card .u2b-tbl thead th { position: sticky; top: 0; background: var(--u6-paper, #f5f1e8); color: var(--u6-ink-soft, #5f6a63); font-weight: 650; text-align: left; padding: 3px 6px; border-bottom: 1px solid var(--u6-line, #d9d2c4); z-index: 2; white-space: nowrap; }
.canvas-card.table-card .u2b-tbl .u2b-c-val { text-align: right; }
.canvas-card.table-card .u2b-tbl tbody td { border-bottom: 1px solid var(--u6-line, #f0ece2); padding: 3px 6px; vertical-align: top; }
.canvas-card.table-card .u2b-tbl .u2b-secrow th { background: var(--u6-paper, #eef3ee); color: var(--u6-pick, #3c6e53); font-size: 9.5px; letter-spacing: .4px; text-align: left; padding: 2px 6px; }
.canvas-card.table-card .u2b-tbl .u2b-datarow:hover { background: var(--u6-paper, #f7f4ec); }
.canvas-card.table-card .u2b-tbl .u2b-seq,
.canvas-card.table-card .u2b-tbl .u2b-td-val { font-variant-numeric: tabular-nums; }
.canvas-card.table-card .u2b-tbl .u2b-td-val { text-align: right; color: var(--u6-pick, #3c6e53); font-weight: 600; white-space: nowrap; }
.canvas-card.table-card .u2b-tbl .u2b-td-seq { white-space: nowrap; color: var(--u6-ink-soft, #8a9690); font-variant-numeric: tabular-nums; }
.canvas-card.table-card .u2b-tbl .u2b-td-unit { color: var(--u6-ink-soft, #6f7f76); white-space: nowrap; }
.canvas-card.table-card .u2b-tbl .u2b-td-note { color: var(--u6-ink-soft, #6f7f76); overflow-wrap: anywhere; min-width: 140px; }
.canvas-card.table-card .u2b-tbl .u2b-td-name .u2b-ind { font-weight: 500; color: var(--u6-ink, #34423b); overflow-wrap: anywhere; }
.canvas-card.table-card .u2b-tbl .u2b-td-name { text-align: left; }
.canvas-card.table-card .u2b-tbl .u2b-row-toggle { background: none; border: none; cursor: pointer; color: var(--u6-pick, #3c6e53); font-size: 10px; padding: 0 2px; }
.canvas-card.table-card .u2b-tbl .u2b-detail td { background: var(--u6-paper, #f5f3ec); padding: 4px 8px; }
.canvas-card.table-card .u2b-detail-inner { font-size: 9.5px; color: var(--u6-ink, #3d453f); }
.canvas-card.table-card .u2b-dstate { font-weight: 650; color: var(--u6-pick, #3c6e53); margin-bottom: 2px; }
.canvas-card.table-card .u2b-dline { margin: 2px 0; color: var(--u6-ink, #4c5550); }
.canvas-card.table-card .u2b-dline.u2b-dcaution { color: var(--u6-gold, #a06a20); }
.canvas-card.table-card .u2b-dcand { margin: 3px 0; }
.canvas-card.table-card .u2b-dcand b { color: var(--u6-ink, #34423b); }
.canvas-card.table-card .u2b-ddiff { color: var(--u6-gold, #a06a20); font-size: 9px; margin-left: 6px; }
.canvas-card.table-card .u2b-dsrc { padding-left: 8px; }
.canvas-card.table-card .u2b-dsrc i { font-style: normal; color: var(--u6-ink-soft, #8a9690); font-size: 9px; }
.canvas-card.table-card .u2b-mark { display: block; font-style: normal; font-size: 8.5px; color: var(--u6-gold, #a06a20); font-weight: 600; }
.canvas-card.table-card .u2b-datarow.u2b-changed { background: var(--u6-paper, #fdf4e6); }
.canvas-card.table-card .u2b-empty { color: var(--u6-ink-soft, #a39c8d); text-align: center; padding: 12px; }
.canvas-card.table-card .u2b-foot { display: flex; align-items: center; justify-content: space-between; gap: 6px; font-size: 8px; color: var(--u6-ink-soft, #a39c8d); margin-top: 2px; }
.canvas-card.table-card .u2b-recheck { background: var(--u6-paper, #f0ede5); border: 1px solid var(--u6-line, #d9d2c4); border-radius: 4px; color: var(--u6-pick, #3c6e53); font-size: 8.5px; line-height: 1.4; padding: 1px 6px; cursor: pointer; }
.canvas-card.table-card .u2b-recheck:hover { background: var(--u6-paper, #e4e0d4); }
.canvas-card.table-card .u2b-recheck:disabled { opacity: .6; cursor: default; }

/* ================= R3（2026-09-08，Codex 目视返修）：抽屉真实面板独立浅实底 + 中和组框通用 span 串染 =================
   基座 styles.css `.group-frame span{position:absolute;top:-24px;background:#71897b;color:white;font-size:9px;padding:5px 8px;border-radius:5px}`
   本意是“组标题小徽标”的 chip；但抽屉是 .group-frame 直系子元素 → 该规则把 P14 表内全部 span（表头+所有单元格+来源等）
   染成深绿圆角小实块，叠在旧透明组底上 → “面板像透明组底、格子里全是深绿块”。
   此处限定：①真实停靠面板背景改独立浅实底（alpha=1，组色半透明仅保留在组框自身，不再延伸到面板）；
            ②仅抽屉 P14 区中和 chip 装饰（去绿底/去 padding/去圆角/去 absolute），文本列回正常继承字号，表头回统一浅灰小标。
   勾选格(.gi-p14-sel/.u2b-gsel-box)与状态 <b> 标记保留更高特异性专色；组标题小徽标在 drawer 之外，不受影响。 */
.group-insight-drawer span {
  position: static;
  top: auto;
  left: auto;
  background: transparent;
  color: inherit;
  padding: 0;
  border-radius: 0;
  font-size: inherit;
  font-weight: inherit;
  line-height: inherit;
}
/* 表头标签行：抵消 chip 白字，统一为轻量浅灰小标（对齐 .gi-p14-head 容器色） */
.group-insight-drawer .gi-p14-head .gi-p14-seq,
.group-insight-drawer .gi-p14-head .gi-p14-name,
.group-insight-drawer .gi-p14-head .gi-p14-val,
.group-insight-drawer .gi-p14-head .gi-p14-unit,
.group-insight-drawer .gi-p14-head .gi-p14-note { color: var(--u6-ink-soft, #7c8a82); font-size: 9px; font-weight: 600; }
/* 勾选格/组勾选框：选中绿底由更高特异性既有规则（.gi-p14-row.sel .gi-p14-sel /
   .u2b-gsel.sel .u2b-gsel-box）保留，上方通用透明默认不会盖掉它们。 */

/* ===== 晨间返修 morning-ux（2026-09-08，隔离 4265）：B 组指标面板 —— 同色相浅不透明底 + morphicon 折角四边按钮 =====
   取代 R3 统一浅白 #fbfaf7：面板底色改为“画布固定浅底混入组色”的不透明底（alpha 最终 1；既非 0.08 透出底卡，亦非统一白）。
   边界/折角沿用组色；四边按钮 glyph 由 ←→ 字符改为同拓扑 "<" 折线（关态朝外、开态朝内），不重建节点、换边/收回平滑过渡并尊重 reduced-motion。
   本段置于文件末尾作后置覆盖（相同特异性后写生效），避免在既有分散规则内改字符串造成非唯一匹配。 */
/* UI-B①：面板底=组色×组透明度在幕布基色 #efeee8 上的 100% 不透明真实合成
   （与组框内空白叠在画布上的观感逐像素一致；--g-c/--g-opacity 自 group-frame 继承，改色/透明度即时联动；
    固定 13% 混色与 #f3efe2 私基色废止；alpha 恒 1，底下卡片不透出、不二次叠透） */
.group-insight-drawer {
  background-color: var(--u6-paper, #efeee8); /* color-mix 不支持时的兜底=幕布基色（无组色偏移，仍不透出） */
  background: color-mix(in srgb, rgb(var(--g-c, 92, 126, 107)) calc(var(--g-opacity, .08) * 100%), var(--u6-paper, #efeee8));
}
/* 折角按钮字形同组色：收起/hover/开态统一由组色深浅表达，不再固定绿 */
.group-insight-edge-toggle { color: rgb(var(--g-c, 92, 126, 107)); }
.group-insight-edge-toggle:hover,
.group-insight-edge-toggle.on { color: color-mix(in srgb, rgb(var(--g-c, 92, 126, 107)) 62%, var(--u6-ink, #141d18)); }
/* morphicon 折角：中和 styles.css `.group-frame span` 组标题 chip 对折叠包装 span 的绝对定位/深绿底串染 */
.group-frame .group-insight-edge-toggle .gi-foldw,
.group-frame .group-insight-edge-toggle .gi-fold {
  position: static;
  top: auto;
  left: auto;
  background: transparent;
  color: currentColor;
  font-size: inherit;
  padding: 0;
  border: 0;
  border-radius: 0;
}
.group-insight-edge-toggle .gi-foldw {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 16px;
  height: 16px;
  transition: transform .18s ease;
}
.group-insight-edge-toggle .gi-fold {
  display: block;
  width: 14px;
  height: 14px;
  stroke: currentColor;
  stroke-width: 1.7;
  stroke-linecap: round;
  stroke-linejoin: round;
  fill: none;
  transition: transform .18s ease;
  transform-origin: 50% 50%;
}
/* 关态基础旋转按边：left=0、right=180、top=90、bottom=-90（折线朝该边外侧）；开态 .on 内层 .gi-fold 再 +180° 朝组内（收回语义） */
.group-insight-edge-toggle[data-group-insight-direction="left"] .gi-foldw { transform: rotate(0deg); }
.group-insight-edge-toggle[data-group-insight-direction="right"] .gi-foldw { transform: rotate(180deg); }
.group-insight-edge-toggle[data-group-insight-direction="top"] .gi-foldw { transform: rotate(90deg); }
.group-insight-edge-toggle[data-group-insight-direction="bottom"] .gi-foldw { transform: rotate(-90deg); }
.group-insight-edge-toggle.on .gi-fold { transform: rotate(180deg); }
/* 主标题“经济技术指标” + 计数：标题字用组色加深，组间有别且正文可读 */
.group-insight-drawer .gi-p14-headline {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 8px;
  margin: 0 0 2px;
}
.group-insight-drawer .gi-p14-title {
  margin: 0;
  font-size: 12px;
  font-weight: 720;
  letter-spacing: .01em;
  color: color-mix(in srgb, rgb(var(--g-c, 92, 126, 107)) 74%, var(--u6-ink, #101812));
}
.group-insight-drawer .gi-p14-count { color: var(--u6-ink-soft, #7c8a82); font-size: 9.5px; font-weight: 600; }
/* 资料详情：<details> 无 open → 默认折叠；真实文件统计仍在其中 */
.group-insight-drawer .gi-materials summary { cursor: pointer; font-size: 10px; font-weight: 650; color: var(--u6-ink-soft, #6f7f76); user-select: none; }
.group-insight-drawer .gi-materials[open] summary { color: rgb(var(--g-c, 92, 126, 107)); }
.group-insight-drawer .gi-materials summary::-webkit-details-marker { color: var(--u6-ink-soft, #8a9690); }
.group-insight-drawer .gi-materials-head { font-size: 9.5px; color: var(--u6-ink-soft, #7c8a82); margin: 4px 0 2px; }
@media (prefers-reduced-motion: reduce) {
  .group-insight-edge-toggle .gi-foldw,
  .group-insight-edge-toggle .gi-fold { transition: none !important; }
}

/* ================= IMAGE-SURFACE-A：无边化图片编辑工作面 =================
   双击图片正文进入「工作面」进入模式：图片直接 contain 铺在父画布右侧工作面，无常驻
   editor-head / 文件名 / 版本条 / 外边框 / 阴影窗壳 / 模态遮罩；左/底层父画布仍可见可操作。
   悬停图片区域或键盘 focus 才显露轻量 SVG 工具；提示词/历史默认收起按需展开；
   最大化铺满应用内容区（无 header/nav/sidebar/底部工具条穿透）。只读 .ro 视图化。 */
.editor-layer.ws {
  position: fixed;
  inset: 0; /* SHELL-C：图片纯工作面铺满顶边（C4.2：薄页眉绝不压纯图；z120 高于页眉 30） */
  z-index: 130;
  pointer-events: none;
  background: transparent;
}
.editor-layer.ws .ws {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  width: 64%;
  min-width: 540px;
  pointer-events: auto;
  background: var(--u6-paper, #ecebe4);
  box-shadow: none;
  border: 0;
}
.editor-layer.ws .ws .ws-canvas {
  position: absolute;
  inset: 12px;
  overflow: hidden;
}
/* N0-12：画笔/橡皮轮廓环——V1 圆形光标的可截图页内替代（OS 光标不进截图面，见 RESULT 诚实声明）；
   直径/位置由 JS 按 w×natH×g 写 inline，overflow:hidden 天然随画布裁剪，pointer-events:none 不拦手势 */
.ed-brushring {
  position: absolute;
  left: 0;
  top: 0;
  transform: translate(-50%, -50%);
  border: 1.5px solid #c9372c;
  border-radius: 50%;
  pointer-events: none;
  display: none;
  z-index: 6;
}
.ed-brushring.on { display: block; }
.ed-brushring.ed-ring-eraser { border-color: #8a94a6; border-style: dashed; background: rgba(255, 255, 255, 0.12); }
.editor-layer.ws .ws .ws-canvas img.ws-img {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: auto;
  height: auto;
  max-width: 100%;
  max-height: 100%;
  object-fit: contain;
  display: block;
  border-radius: 3px;
  -webkit-user-drag: none;
}
/* 缺失原始图片：诚实提示，不用建筑示意图冒充原图 */
.editor-layer.ws .ws .ws-canvas .ws-missing {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 7px;
  color: #6f756f;
  text-align: center;
  background: repeating-linear-gradient(45deg, #e7e6df 0 14px, #ecebe4 14px 28px);
  border-radius: 8px;
}
.editor-layer.ws .ws .ws-missing svg { stroke: #9aa09a; width: 30px; height: 30px; }
.editor-layer.ws .ws .ws-missing strong { font-size: 13px; color: #5f655f; }
.editor-layer.ws .ws .ws-missing small { font-size: 10px; color: #8f938c; max-width: 260px; line-height: 1.5; }

/* 轻量 SVG 控件：静止隐藏，悬停工作面或键盘 focus 显露；隐藏仍可 Tab 发现（仅 opacity，不 display/visibility） */
.editor-layer.ws .ws .ws-controls {
  position: absolute;
  top: 12px;
  left: 50%;
  transform: translateX(-50%);
  display: flex;
  align-items: center;
  gap: 4px;
  padding: 5px;
  border-radius: 12px;
  background: rgba(28, 38, 33, .86);
  box-shadow: 0 8px 22px rgba(24, 30, 27, .22);
  opacity: 0;
  transition: none;
  z-index: 4;
}
.editor-layer.ws .ws:hover .ws-controls,
.editor-layer.ws .ws:focus-within .ws-controls,
.editor-layer.ws .ws .ws-controls:focus-within {
  opacity: 1;
}
.editor-layer.ws .ws .ws-ctrl {
  border: 0;
  background: transparent;
  color: #f4f2ea;
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 5px 8px;
  border-radius: 8px;
  cursor: pointer;
  font-size: 11px;
  white-space: nowrap;
}
.editor-layer.ws .ws .ws-ctrl svg { stroke: currentColor; }
.editor-layer.ws .ws .ws-ctrl:hover { background: rgba(255, 255, 255, .16); }
.editor-layer.ws .ws .ws-ctrl.ws-ctrl-save { background: var(--u6-gold, #efce6e); color: var(--u6-ink, #2c3026); }
.editor-layer.ws .ws .ws-ctrl.ws-ctrl-save:hover { background: var(--u6-gold, #f3d67f); }
.editor-layer.ws .ws .ws-ctrl.ws-ctrl-back { background: var(--u6-dark, #3d4c44); }

/* 底部状态：仅未保存小圆点+可读标签；生成入口已移入按需 prompt 面板，静止/最大化保持纯内容 */
.editor-layer.ws .ws .ws-statusbar {
  position: absolute;
  left: 18px;
  bottom: 12px;
  display: flex;
  align-items: center;
  gap: 12px;
  font-size: 10px;
  color: var(--u6-ink-soft, #6c706a);
  z-index: 3;
  pointer-events: none;
}
.editor-layer.ws .ws .ws-statusbar .ws-dirty { color: var(--u6-gold, #b98a25); }

/* prompt 面板内：禁用生成入口（标注「生成接口待接入」）+ 草稿写失败诚实提示 */
.editor-layer.ws .ws .ws-panel .ws-panel-gen {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  margin-top: 7px;
}
.editor-layer.ws .ws .ws-panel .ws-panel-gen .ws-gen {
  pointer-events: none;
  border: 1px dashed var(--u6-line, #b3b0a4);
  background: rgba(250, 249, 244, .92);
  color: var(--u6-ink-soft, #858882);
  border-radius: 8px;
  padding: 4px 9px;
  display: inline-flex;
  gap: 6px;
  align-items: center;
  font-size: 10px;
  opacity: .95;
  cursor: not-allowed;
  white-space: nowrap;
}
.editor-layer.ws .ws .ws-panel .ws-panel-gen .ws-gen svg { stroke: currentColor; }
.editor-layer.ws .ws .ws-panel .ws-panel-gen .ws-draftnote {
  font-size: 9px;
  color: var(--u6-ink-soft, #8b8d86);
  line-height: 1.4;
  min-height: 13px;
  text-align: right;
}
.editor-layer.ws .ws .ws-panel .ws-panel-gen .ws-draftnote.on { color: var(--u6-flag, #a3483f); font-weight: 600; }

/* 提示词/历史面板：默认随控件收起，点开才渲染；输入期间鼠标离开不消失（面板自身 hover/focus 保持） */
.editor-layer.ws .ws .ws-panel {
  position: absolute;
  top: 54px;
  left: 50%;
  transform: translateX(-50%);
  width: min(372px, 86%);
  max-height: calc(100% - 130px);
  background: var(--u6-paper, #faf9f4);
  border: 1px solid var(--u6-line, #d7d5cb);
  border-radius: 14px;
  box-shadow: var(--sh-pop);
  padding: 10px 12px;
  display: flex;
  flex-direction: column;
  overflow: auto;
  z-index: 5;
}
.editor-layer.ws .ws .ws-panel .ws-panel-title {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 10px;
  font-size: 11px;
  font-weight: 680;
  color: var(--u6-ink, #3b423d);
  margin-bottom: 8px;
}
.editor-layer.ws .ws .ws-panel .ws-panel-title .ws-panel-close {
  border: 0;
  background: transparent;
  color: var(--u6-ink-soft, #8a8c85);
  display: grid;
  place-items: center;
  padding: 3px;
  cursor: pointer;
  border-radius: 6px;
}
.editor-layer.ws .ws .ws-panel .ws-panel-close:hover { background: var(--u6-paper, #ecebe4); color: var(--u6-ink, #3a3d38); }
.editor-layer.ws .ws .ws-panel .ws-panel-title svg { stroke: currentColor; }
.editor-layer.ws .ws textarea[data-ws-prompt] {
  width: 100%;
  min-height: 76px;
  border: 1px solid var(--u6-line, #cfcdc2);
  border-radius: 9px;
  background: var(--surface);
  padding: 8px 10px;
  font-size: 12px;
  line-height: 1.55;
  color: var(--u6-ink, #33362f);
  resize: vertical;
}
.editor-layer.ws .ws textarea[data-ws-prompt]:focus { outline: 2px solid color-mix(in srgb, var(--u6-pick, #406654) 35%, transparent); border-color: var(--u6-pick, #7c9c8a); }
.editor-layer.ws .ws textarea[data-ws-prompt]:disabled { background: var(--u6-paper, #efeee8); color: var(--u6-ink-soft, #a7a8a1); cursor: not-allowed; }
.editor-layer.ws .ws .ws-panel .ws-panel-foot {
  display: flex;
  justify-content: space-between;
  gap: 8px;
  font-size: 9px;
  color: var(--u6-ink-soft, #8b8d86);
  margin-top: 7px;
}
.editor-layer.ws .ws .ws-panel .ws-panel-foot em { font-style: normal; color: var(--u6-gold, #b58528); }

/* 历史版本行：data-version 切换主图，set-cover 设封面（只读 .ro 不渲染写控件） */
.editor-layer.ws .ws .ws-history-row {
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 6px 4px;
  border-bottom: 1px solid var(--u6-line, #e5e3da);
}
.editor-layer.ws .ws .ws-history-row.active { background: var(--u6-paper, #e9eee7); border-radius: 9px; }
.editor-layer.ws .ws .ws-history-row .ws-history-main {
  border: 0;
  background: var(--u6-paper, #dde4de);
  color: var(--u6-ink, #3c5647);
  border-radius: 7px;
  padding: 6px 9px;
  font-size: 10px;
  font-weight: 680;
  cursor: pointer;
  min-width: 36px;
}
.editor-layer.ws .ws .ws-history-row .ws-history-info { flex: 1; min-width: 0; }
.editor-layer.ws .ws .ws-history-row .ws-history-info strong {
  display: block;
  font-size: 10px;
  color: var(--u6-ink, #3d423c);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.editor-layer.ws .ws .ws-history-row .ws-history-info small {
  display: block;
  font-size: 9px;
  color: var(--u6-ink-soft, #989b94);
  margin-top: 2px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.editor-layer.ws .ws .ws-history-row .ws-cover {
  border: 1px solid var(--u6-line, #cfcec5);
  background: var(--u6-paper, #f4f3ee);
  border-radius: 7px;
  padding: 3px 7px;
  font-size: 9px;
  color: var(--u6-ink-soft, #6f716c);
  cursor: pointer;
  white-space: nowrap;
}
.editor-layer.ws .ws .ws-history-row .ws-cover.is-cover { background: var(--u6-paper, #dfe9e1); color: var(--u6-pick, #3c6a4c); border-color: var(--u6-line, #bcd2c2); }
.editor-layer.ws .ws .ws-history-row .ws-empty,
.editor-layer.ws .ws .ws-empty { font-size: 11px; color: var(--u6-ink-soft, #a0a19b); padding: 12px 4px; }

/* 最大化：同一工作面铺满应用内容区（无 header/nav/sidebar/底部工具条穿透） */
.editor-layer.ws.max {
  inset: 0;
  z-index: 130;
  background: var(--u6-dark, #201f1b);
}
.editor-layer.ws.max .ws {
  width: 100%;
  min-width: 0;
  inset: 0;
}
.editor-layer.ws.max .ws .ws-canvas { inset: 18px; }
.editor-layer.ws.max .ws .ws-canvas img.ws-img {
  width: 100%;
  height: 100%;
  max-width: none;
  max-height: none;
  object-fit: contain;
}
@media (max-width: 1280px) {
  .editor-layer.ws .ws { width: 68%; min-width: 460px; }
}

/* ==== WORKSPACE-SHELL-A → C · 画布外壳显隐 ====
   仅 canvas 页（:has(.canvas-shell)）生效。WORKSPACE-SHELL-C（用户裁决，取代 A 的"普通顶部隐藏/
   保留占位"合同）：
   - 普通态：极薄页眉常显（覆盖式，不占布局流——见 W1-AW/C 块 position:fixed）；
   - 左 rail 覆盖层化（fixed，脱离 flex 流）：收起时画布铺到左边缘，不残留 54px 空条；
     靠近左缘显露/个人固定偏好沿用 A 语义，固定也悬于画布上、绝不挤压 stage；
   - 全屏（shell-fs）纯内容语义不变：页眉隐藏、顶缘/焦点召回（main.js shellSync 供类）。
   pinned/revealed 类由 main.js shellSync 写在 .app-frame 上，样式不含测试专用钩子。 */
.app-frame:has(.canvas-shell) .app-header,
.app-frame:has(.canvas-shell) .left-rail { transition: opacity .16s ease; }
/* 页眉隐藏仅存在于全屏态；普通态常显（不再有 shell-top-pinned 一说，钮已移除、偏好键兼容保留）。 */
.app-frame.shell-fs:has(.canvas-shell):not(.shell-top-revealed) .app-header { opacity: 0; pointer-events: none; }
.app-frame:has(.canvas-shell) .left-rail {
  position: fixed;
  left: 0;
  top: 28px; /* 贴薄页眉下缘 */
  bottom: 0;
  z-index: 24; /* 悬于画布上、页眉(30)与编辑器(50+)之下 */
}
.app-frame:has(.canvas-shell):not(.shell-left-pinned):not(.shell-left-revealed) .left-rail { opacity: 0; pointer-events: none; }
.app-frame:has(.canvas-shell) .left-rail .shell-pin-btn { margin-bottom: 4px; }
.app-frame:has(.canvas-shell) .shell-pin-btn.on svg { transform: rotate(45deg); }
.app-frame:has(.canvas-shell) .shell-pin-btn:focus-visible { outline: 2px solid var(--u6-line, #658271); outline-offset: 1px; }
/* 全屏纯画布：底部常驻工具默认隐藏，底边召回；canvas-label 已随 C 移除，无残留可言 */
.app-frame.shell-fs:has(.canvas-shell) .canvas-toolbar,
.app-frame.shell-fs:has(.canvas-shell) .zoom-control { transition: opacity .16s ease; }
.app-frame.shell-fs:has(.canvas-shell):not(.shell-fs-bottom) .canvas-toolbar,
.app-frame.shell-fs:has(.canvas-shell):not(.shell-fs-bottom) .zoom-control { opacity: 0; pointer-events: none; }
/* Codex R1（退回第1项）：全屏纯画布含工作入口——未打开的入口小头默认隐藏，右缘带或焦点进入
   入口组（shell-fs-work，Tab 召回）时显现；已打开面板与其头部不受此规则影响（输入不中断）。
   错误/操作提示 .toast 位于独立层，非入口组成员，全屏静止仍完整可见。 */
.app-frame.shell-fs:has(.canvas-shell) .float-object:not(.open) .float-head { transition: opacity .16s ease; }
.app-frame.shell-fs:has(.canvas-shell):not(.shell-fs-work) .float-object:not(.open) .float-head { opacity: 0; pointer-events: none; }

/* ================= DEMO-D：专职本地图片编辑层（ed-*，全部限定 [data-ed-demo] 作用域）=================
   一列工具（左缘常显）+ 一行历史（底部常显）+ 工作流卡片面板（F：紧凑 340px / 最大化 420px，图片可用区真实让位）。
   几何：.ws-canvas 通过 inset 让位，紧凑/扩展同一机制；--ed-wf 由 section[data-ed-wf-open] 驱动（面板宽+12，保持 24px 视口间隙）。 */
.editor-layer.ws[data-ed-demo] .ws { --ed-wf: 0px; }
.editor-layer.ws[data-ed-demo] .ws[data-ed-wf-open] { --ed-wf: 352px; }
.editor-layer.ws[data-ed-demo].max .ws[data-ed-wf-open] { --ed-wf: 432px; } /* F：最大化 3 列 420px 面板 */
/* UI E：图片可用区真实扣除右侧工具列（46px）与底部历史（96px），坐标命中区与视觉区一致 */
/* FOOTER-P0 ②（2026-09-15 用户截图裁决「对话框跟图片重叠」）：底部行统一真占高 120px（缩略图/正文输入/动作列同一带），
   画布底缘内缩 108→132（=带高 120+12 间隙；.max 114→138）——fit 经 stageBox=getBoundingClientRect 自动随动，
   图像可视区与输入区不再相交；非 z-index 遮盖、非 textarea 位移、非 absolute 假腾位。 */
.editor-layer.ws[data-ed-demo] .ws .ws-canvas {
  inset: 12px calc(58px + var(--ed-wf)) 132px 12px;
}
.editor-layer.ws[data-ed-demo].max .ws .ws-canvas {
  inset: 18px calc(58px + var(--ed-wf)) 138px 18px;
}
.editor-layer.ws[data-ed-demo] .ws .ws-canvas canvas.ed-canvas,
.editor-layer.ws[data-ed-demo] .ws .ws-canvas canvas.ed-cropcv {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
  z-index: 2;
}
.editor-layer.ws[data-ed-demo] .ws .ws-canvas .ed-inputlayer {
  position: absolute;
  inset: 0;
  pointer-events: none;
  z-index: 3;
}
.editor-layer.ws[data-ed-demo] .ws .ws-canvas .ed-inputlayer .ed-text-input {
  position: absolute;
  transform: translate(-50%, -50%);
  pointer-events: auto;
  width: 210px;
  max-width: 46%;
  font-size: 13px;
  font-weight: 600;
  color: #1d2320;
  background: rgba(250, 249, 244, .94);
  border: 1.5px solid #1f7a5c;
  border-radius: 7px;
  padding: 5px 8px;
  box-shadow: var(--sh-lift);
}
.editor-layer.ws[data-ed-demo] .ws .ed-slot { display: contents; }
/* UI E：工具列贴右缘，取消悬浮胶囊四角/阴影/外间距，与图片/历史共用工作面底色，角部以细分隔线连续 */
.editor-layer.ws[data-ed-demo] .ws .ed-toolbar {
  position: absolute;
  right: 0;
  top: 0;
  bottom: 120px; /* FOOTER-P0 ②：底部行动作列加高至 120（容纳 最大化/发送/返回 三件），工具列随之让带 */
  left: auto;
  width: 46px;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 3px;
  padding: 5px;
  border-radius: 0;
  background: var(--u6-paper, #ecebe4);
  border-left: 1px solid var(--u6-line, #dedcd3);
  border-bottom: 1px solid var(--u6-line, #dedcd3);
  box-shadow: none;
  z-index: 6;
  opacity: 1;
  transition: opacity .2s ease;
}
.editor-layer.ws[data-ed-demo] .ws .ed-tool {
  flex: 0 0 auto;
  width: 32px;
  height: 32px;
  border: 0;
  border-radius: 8px;
  background: transparent;
  color: var(--u6-ink, #3a3d38);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  padding: 0;
}
.editor-layer.ws[data-ed-demo] .ws .ed-tool svg { width: 16px; height: 16px; stroke: currentColor; }
.editor-layer.ws[data-ed-demo] .ws .ed-tool:hover { background: rgba(28, 38, 33, .10); }
.editor-layer.ws[data-ed-demo] .ws .ed-tool.active { background: var(--u6-gold, #efce6e); color: var(--u6-ink, #2c3026); }
.editor-layer.ws[data-ed-demo] .ws .ed-tool-fit { margin-top: auto; }
/* UI E：控件角部方块——右下 46×96，与工具列/历史同底色同分隔语言，真实明确入口常显 */
.editor-layer.ws[data-ed-demo] .ws .ws-controls.ws-controls-demo {
  position: absolute;
  top: auto;
  left: auto;
  right: 0;
  bottom: 0;
  transform: none;
  width: 46px;
  height: 120px; /* FOOTER-P0 ①②：最右动作列=底部行同带真占高 120px；ED-A⑤（09-16 派工单第5条）固定自上而下 提交→全屏→返回画布 */
  box-sizing: border-box;
  flex-direction: column;
  justify-content: center;
  gap: 6px;
  padding: 0;
  border-radius: 0;
  background: var(--u6-paper, #ecebe4);
  border-top: 1px solid var(--u6-line, #dedcd3);
  border-left: 1px solid var(--u6-line, #dedcd3);
  box-shadow: none;
  opacity: 1;
  z-index: 7;
}
.editor-layer.ws[data-ed-demo] .ws .ws-controls-demo .ws-ctrl { color: var(--u6-ink, #3a3d38); width: 32px; height: 32px; padding: 8px; box-sizing: border-box; } /* ED-A⑤：列内三钮统一 32×32 命中框（提交/全屏/返回同体系） */
.editor-layer.ws[data-ed-demo] .ws .ws-controls-demo .ws-ctrl:hover { background: rgba(28, 38, 33, .10); }
/* R2①：返回钮浅底化——旧全局 .ws-ctrl-back 深色底(#3d4c44)在浅底工作面上暗底暗字（对比≈1.2:1），
   Demo 层覆盖为透明（随方块底色 #ecebe4，图标 #3a3d38 对比≈9.2:1）；hover/active/focus/disabled 均可辨 */
.editor-layer.ws[data-ed-demo] .ws .ws-controls-demo .ws-ctrl-back { background: transparent; }
.editor-layer.ws[data-ed-demo] .ws .ws-controls-demo .ws-ctrl-back:hover { background: rgba(28, 38, 33, .10); }
.editor-layer.ws[data-ed-demo] .ws .ws-controls-demo .ws-ctrl-back:active { background: rgba(28, 38, 33, .18); }
.editor-layer.ws[data-ed-demo] .ws .ws-controls-demo .ws-ctrl:focus-visible { outline: 2px solid var(--u6-line, #456052); outline-offset: -2px; }
.editor-layer.ws[data-ed-demo] .ws .ws-controls-demo .ws-ctrl:disabled { color: var(--u6-ink-soft, #a9ada6); background: transparent; cursor: default; }
.editor-layer.ws[data-ed-demo] .ws .ed-storewarn {
  position: absolute;
  left: 12px;
  top: 8px;
  width: 230px;
  display: none;
  font-size: 11px;
  line-height: 1.5;
  color: #ffe9e2;
  background: rgba(122, 42, 34, .94);
  border-radius: 9px;
  padding: 7px 9px;
  z-index: 10;
}
.editor-layer.ws[data-ed-demo] .ws .ed-storewarn.on { display: block; }
/* UI E：历史贴底通栏（右至工具列左缘），与工作面同底色、无悬浮圆角/阴影，仅一条顶部细分隔线；
   高约 96px，缩略图高约 68px 按源图纵横 contain（固有尺寸由 paintThumbs 按 naturalWidth/Height 定） */
.editor-layer.ws[data-ed-demo] .ws .ed-history {
  position: absolute;
  left: 0;
  right: 46px;
  bottom: 0;
  height: 88px; /* UI-REDLINE-20261011 ⑪：原图缩略图带 120→88（缩略图内容带 108→76），不再与正文输入框
                   （uiopt-r4.css:235 min-height clamp(150px,20vh,200px)）齐高；底缘 bottom 不变，仅上缘下移。
                   本行是该带高度的唯一出处（全树 grep 确认无第二处 height 声明、无 media 覆写）。 */
  box-sizing: border-box;
  display: flex;
  align-items: stretch;
  gap: 8px;
  padding: 4px 10px 8px; /* R2③：顶部 8→4px，给底部文字 ≥3px 呼吸（栏高 96/缩略 68/字号/标签不变） */
  border-radius: 0;
  background: var(--u6-paper, #ecebe4);
  border-top: 1px solid var(--u6-line, #dedcd3);
  overflow-x: auto;
  overflow-y: hidden;
  z-index: 6;
  opacity: 1;
  transition: opacity .2s ease;
}
.editor-layer.ws[data-ed-demo] .ws .ed-hist-item {
  flex: 0 0 auto;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 2px;
  border: 1px solid transparent;
  border-radius: 8px;
  background: transparent;
  color: var(--u6-ink, #3a3d38);
  cursor: pointer;
  padding: 0 4px; /* R2③：随历史条呼吸调整（2px→0），栏高与缩略尺寸不变 */
}
.editor-layer.ws[data-ed-demo] .ws .ed-hist-item:hover { border-color: rgba(28, 38, 33, .28); }
.editor-layer.ws[data-ed-demo] .ws .ed-hist-item.pending { border-color: var(--u6-gold, #efce6e); outline: 1.5px solid var(--u6-gold, #b98a25); }
.editor-layer.ws[data-ed-demo] .ws .ed-hist-thumb { display: flex; align-items: center; }
.editor-layer.ws[data-ed-demo] .ws .ed-hist-thumb canvas {
  width: auto;
  height: auto; /* R2②：显示=固有（固有尺寸由 paintThumbs 有界 contain 出，≤200×92），杜绝 max-width 单轴非等比压缩 */
  max-height: 92px; /* R7-02 上下占满（09-21 工单）：68→92 = 条高120 − 上下pad12 − 标签13.75 − 间距2，与 JS TH=92 同闸 */
  max-width: 200px;
  display: block;
  border-radius: 4px;
  background: #10130f;
}
.editor-layer.ws[data-ed-demo] .ws .ed-hist-label {
  font-size: 11px;
  line-height: 1.25;
  white-space: nowrap;
}
/* P裁（2026-09-10）：未持久化=持续可见徽章（从版本存量数据派生，非瞬时提示；琥珀色与「存储警告条」同族语义，不遮挡缩略与标签） */
.editor-layer.ws[data-ed-demo] .ws .ed-hist-flag {
  flex: 0 0 auto;
  align-self: flex-start;
  font-style: normal;
  font-size: 9px;
  line-height: 1.4;
  padding: 1px 5px;
  border-radius: 6px;
  background: #4a3413;
  color: #f5c451;
  border: 1px solid #8a6117;
  white-space: nowrap;
}
.editor-layer.ws[data-ed-demo] .ws .ed-cropbar {
  position: absolute;
  top: 16px;
  left: 50%;
  transform: translateX(-50%);
  display: flex;
  align-items: center;
  gap: 8px;
  background: #1c2620;
  color: #f4f2ea;
  border-radius: 10px;
  padding: 6px 10px;
  font-size: 11px;
  z-index: 7;
  box-shadow: var(--sh-pop);
}
.editor-layer.ws[data-ed-demo] .ws .ed-cropbar button {
  border: 0;
  border-radius: 7px;
  padding: 4px 9px;
  font-size: 11px;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  gap: 4px;
}
.editor-layer.ws[data-ed-demo] .ws .ed-cropbar [data-ed-crop-ok],
.editor-layer.ws[data-ed-demo] .ws .ed-cropbar [data-ed-maskop-ok],
.editor-layer.ws[data-ed-demo] .ws .ed-cropbar [data-ed-wand-ok] { /* C-U14-MAGIC-WAND：魔棒确认钮=与裁剪/蒙版操作确认同一主题语义（同声明块，5.0:1 基座绿，不入 r4——沿〔173〕裁决 */ background: #2e7d5b; color: #fff; } /* C-U14-R1：蒙版预览确认钮=裁剪确认钮同一规则同一声明块（字面同主题语义，非复制值） */
.editor-layer.ws[data-ed-demo] .ws .ed-cropbar [data-ed-crop-cancel],
.editor-layer.ws[data-ed-demo] .ws .ed-cropbar [data-ed-maskop-cancel],
.editor-layer.ws[data-ed-demo] .ws .ed-cropbar [data-ed-wand-cancel] { background: #4a544d; color: #e8e6dd; } /* C-U14-R1：取消钮同理 */
.editor-layer.ws[data-ed-demo] .ws .ed-brushpanel {
  position: absolute;
  left: auto;
  right: 58px;
  top: 16px;
  display: flex;
  align-items: center;
  gap: 7px;
  background: rgba(28, 38, 33, .92);
  border-radius: 10px;
  padding: 6px 10px;
  z-index: 7;
}
.editor-layer.ws[data-ed-demo] .ws .ed-brush-label { color: #e8e6dd; font-size: 11px; }
.editor-layer.ws[data-ed-demo] .ws .ed-color {
  width: 22px;
  height: 22px;
  border-radius: 50%;
  border: 2px solid rgba(255, 255, 255, .22);
  background: var(--sw);
  cursor: pointer;
  padding: 0;
}
.editor-layer.ws[data-ed-demo] .ws .ed-color.on { border-color: #fff; }
/* D5 自定义取色+最近色：原生 input 隐形铺满色块面（零自造拾色器，点击即弹系统控件）；最近色虚线描边与预设区分 */
.editor-layer.ws[data-ed-demo] .ws .ed-color-custom { position: relative; display: inline-block; overflow: hidden; }
.editor-layer.ws[data-ed-demo] .ws .ed-color-custom input { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0; border: 0; padding: 0; cursor: pointer; }
.editor-layer.ws[data-ed-demo] .ws .ed-color-recent { border-style: dashed; }
.editor-layer.ws[data-ed-demo] .ws .ed-brush-w { color: #cfd3cb; font-size: 10px; display: inline-flex; align-items: center; gap: 4px; }
.editor-layer.ws[data-ed-demo] .ws .ed-confirm {
  position: absolute;
  left: 50%;
  top: 42%;
  transform: translate(-50%, -50%);
  width: min(430px, 82%);
  background: var(--u6-paper, #f7f5ee);
  border-radius: 14px;
  padding: 15px 16px;
  z-index: 9;
  box-shadow: var(--sh-pop);
  display: flex;
  flex-direction: column;
  gap: 11px;
  color: var(--u6-ink, #33362f);
}
.editor-layer.ws[data-ed-demo] .ws .ed-confirm strong { font-size: 12.5px; line-height: 1.6; font-weight: 650; }
.editor-layer.ws[data-ed-demo] .ws .ed-confirm > div { display: flex; gap: 8px; justify-content: flex-end; }
.editor-layer.ws[data-ed-demo] .ws .ed-confirm button { border: 0; border-radius: 8px; padding: 6px 12px; font-size: 11.5px; cursor: pointer; }
.editor-layer.ws[data-ed-demo] .ws .ed-confirm [data-ed-confirm-save] { background: var(--u6-pick-deep, #2e6b4f); color: #fff; }
.editor-layer.ws[data-ed-demo] .ws .ed-confirm [data-ed-confirm-discard] { background: var(--u6-flag, #b3543f); color: #fff; }
.editor-layer.ws[data-ed-demo] .ws .ed-confirm [data-ed-confirm-cancel] { background: var(--u6-paper, #dddbd1); color: var(--u6-ink, #3a3d38); }
.editor-layer.ws[data-ed-demo] .ws .ed-asset-state {
  position: absolute;
  left: 12px;
  top: 12px;
  max-width: 58%;
  border-radius: 8px;
  padding: 6px 10px;
  font-size: 11px;
  line-height: 1.5;
  z-index: 9;
  pointer-events: none;
  background: rgba(46, 107, 79, .92);
  color: #fff;
}
.editor-layer.ws[data-ed-demo] .ws .ed-asset-state[data-ed-asset-state="missing"] { background: rgba(140, 52, 42, .95); }
.editor-layer.ws[data-ed-demo] .ws .ed-exporterr {
  position: absolute;
  left: 50%;
  bottom: 132px; /* FOOTER-P0 ②：随底部带 108→132 抬升，不落输入行上 */
  transform: translateX(-50%);
  background: rgba(140, 52, 42, .95);
  color: #fff;
  font-size: 11px;
  border-radius: 8px;
  padding: 6px 10px;
  z-index: 8;
}
/* UI E：工作流面板从右缘向内展开、贴合工具列左缘共用容器（不另开弹窗），上下与工具/历史对齐，不遮挡三者。
   F：卡片化三级展开——紧凑 2 列（面板 340px）/最大化 3 列（420px）；网格区自滚动，提示槽固定面板底部（说明永不出界）。
   N0-11 定稿条2/3/6（09-11 用户纠正版·同 CLI UXTEST-assetrow-r1 合同）：右栏几何唯一权威=.ed-rail flex 列直达视口底——
   面板挂载（含属性/配置/模式尾段 .ed-wf-foot，R5 条④随工作流成组）+ 底部唯一正文带（96px，上下缘与资产缩略图栏对齐）共享 rail 高度；
   资产栏以 --preview-composer-width 给右侧正文让宽；唯一滚动区=.ed-wf-body。旧「composer bottom:96 高于资产条」作废。 */
.editor-layer.ws[data-ed-demo] .ws .ed-rail {
  position: absolute;
  right: 46px;
  top: 0;
  bottom: 0;
  width: 340px;
  box-sizing: border-box;
  display: flex;
  flex-direction: column;
  z-index: 7;
  pointer-events: none; /* rail 折叠时挂载区空档点击穿透画布；面板/底部段子级显式收回 */
}
.editor-layer.ws[data-ed-demo].max .ws .ed-rail { width: 420px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-mount { flex: 1 1 auto; min-height: 0; display: flex; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-mount:empty { flex: 0 0 auto; }
/* N0-11-R5 条④（2026-09-12 用户红字「跟着工作流走不是对话框」）：rail-bottom 常驻尾段废除——
   属性/配置/模式行迁入 .ed-wf-foot（在 .ed-wf-panel 内、.ed-wf-body 之后）：随面板开关成组消隐/恢复、收起零占位；
   与模板区同容器同 padding=与参数行固定对齐同边界（条②）。旧 cfg150/attr120 帽随载体一并作废。 */
.editor-layer.ws[data-ed-demo] .ws .ed-wf-foot { flex: 0 0 auto; display: flex; flex-direction: column; gap: 5px; border-top: 1px dashed var(--u6-line, #dedcd3); padding-top: 7px; } /* 面板尾段=属性区→配置行→模式/状态行，自上而下 */
.editor-layer.ws[data-ed-demo] .ws .ed-wf-foot .ed-attrzone { overflow: visible; } /* N0-11-R2 条3 语义保持：紧凑触发行；上拉菜单 absolute 出列不得被裁切 */
.editor-layer.ws[data-ed-demo] .ws .ed-wf-panel {
  position: static;
  flex: 1 1 auto;
  min-width: 0;
  min-height: 0;
  box-sizing: border-box;
  background: var(--u6-paper, #f4f2ea);
  border-radius: 0;
  border-left: 1px solid var(--u6-line, #dedcd3);
  padding: 10px 12px;
  display: flex;
  flex-direction: column;
  gap: 8px;
  overflow: visible; /* N0-11-R5 条②：尾段触发的上拉菜单可出面板缘不被裁切；唯一滚动区仍是 .ed-wf-body（自身 overflow-y:auto 不依赖父裁切） */
  font-size: 11px;
  color: var(--u6-ink, #3a3d38);
  box-shadow: none;
  transition: opacity .2s ease;
  pointer-events: auto;
}
.editor-layer.ws[data-ed-demo] .ws .ed-wf-head { display: flex; align-items: baseline; gap: 8px; flex: 0 0 auto; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-head strong { font-size: 12.5px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-sub { flex: 1; font-size: 9.5px; color: var(--u6-ink-soft, #8a8d84); }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-close { border: 0; background: transparent; color: var(--u6-ink-soft, #6a6d66); cursor: pointer; display: inline-flex; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-body { flex: 1 1 auto; min-height: 0; overflow-y: auto; display: flex; flex-direction: column; gap: 8px; padding-right: 2px; } /* N0-11 条2：全栏唯一滚动容器——卡行+模板方块持续向下排列 */
.editor-layer.ws[data-ed-demo] .ws .ed-wf-grid { flex: 0 0 auto; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; align-content: start; } /* 滚动让位 .ed-wf-body（条2 单一滚动区） */
.editor-layer.ws[data-ed-demo].max .ws .ed-wf-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-cardwrap { position: relative; min-width: 0; }
/* G（Icons）：一级入口=品牌图标+短名称——无图片封面、无外层大卡边框/常驻角标块；48–56px 图标、整体更紧凑。 */
.editor-layer.ws[data-ed-demo] .ws .ed-wf-card {
  width: 100%;
  box-sizing: border-box;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 5px;
  border: 1px solid transparent;
  background: transparent;
  border-radius: 10px;
  padding: 7px 4px 5px;
  font-size: 11px;
  color: var(--u6-ink, #3a3d38);
  cursor: pointer;
  text-align: center;
}
.editor-layer.ws[data-ed-demo] .ws .ed-wf-card:hover,
.editor-layer.ws[data-ed-demo] .ws .ed-wf-card:focus-visible { border-color: var(--u6-line, #9fb2a4); background: var(--u6-paper, #f3f2ea); }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-card.on { border-color: var(--u6-pick-deep, #2e6b4f); background: var(--u6-paper, #eef4ef); }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-card.active { border-color: var(--u6-pick-deep, #2e6b4f); }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-icon { width: 52px; height: 52px; display: flex; align-items: center; justify-content: center; border-radius: 13px; background: var(--u6-paper, #ecebe4); color: var(--u6-ink, #55584f); flex: 0 0 auto; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-icon-flux { width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; border-radius: 13px; background: var(--u6-dark, #1d2320); color: #f2efe6; font-weight: 700; font-size: 12.5px; letter-spacing: .2px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-icon-plus { font-style: normal; font-size: 26px; color: var(--u6-ink-soft, #8a8d84); line-height: 1; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-icon-abbr { width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; border-radius: 13px; color: #f5f3ea; font-weight: 700; font-size: 16px; letter-spacing: 1px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-status { position: absolute; top: 9px; right: 10px; width: 7px; height: 7px; border-radius: 50%; background: var(--u6-wash, #b3b6ac); box-shadow: 0 0 0 2px #eceae0; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-status[data-wf-status="planned"] { background: transparent; border: 1.5px solid var(--u6-line, #8a8d84); width: 6px; height: 6px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-status[data-wf-status="local"] { background: var(--u6-pick-deep, #2e7d5b); }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-cardname { font-size: 10.5px; font-weight: 600; max-width: 100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-carddel {
  position: absolute;
  right: -5px;
  top: -5px;
  z-index: 2;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  border: 1px solid var(--u6-line, #cfccc0);
  background: var(--u6-paper, #fbfaf5);
  color: var(--u6-flag, #97716a);
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0;
}
.editor-layer.ws[data-ed-demo] .ws .ed-wf-preset {
  grid-column: 1 / -1;
  box-sizing: border-box;
  border: 1px solid var(--u6-line, #c9cfc6);
  background: var(--u6-paper, #faf9f2);
  border-radius: 12px;
  padding: 8px;
  display: flex;
  flex-direction: column;
  gap: 8px;
  min-width: 0;
}
.editor-layer.ws[data-ed-demo] .ws .ed-wf-reservedpanel p { margin: 0; font-size: 10.5px; color: var(--u6-ink, #55584f); line-height: 1.5; }
/* ===== N5-01A（2026-09-13）：高清放大前置交互面板差量样式——复用 .ed-wf-field/.ed-wf-param-err 既有惯用法，此处零覆盖仅增量 ===== */
.editor-layer.ws[data-ed-demo] .ws .ed-up-panel { gap: 7px; }
.editor-layer.ws[data-ed-demo] .ws .ed-up-row { display: flex; gap: 6px; flex-wrap: wrap; align-items: flex-start; min-width: 0; }
.editor-layer.ws[data-ed-demo] .ws .ed-up-row .ed-wf-field { flex: 1 1 0; min-width: 0; }
.editor-layer.ws[data-ed-demo] .ws .ed-up-row .ed-wf-field > span .dim { color: var(--u6-ink-soft, #9a9d94); font-size: 9px; }
.editor-layer.ws[data-ed-demo] .ws .ed-up-actions { display: flex; gap: 6px; flex-wrap: wrap; }
.editor-layer.ws[data-ed-demo] .ws .ed-up-actions button { font-size: 10.5px; padding: 4px 10px; border-radius: 6px; border: 1px solid var(--u6-line, #cfcdc2); background: var(--surface); color: var(--u6-ink, #3c3f38); cursor: pointer; }
.editor-layer.ws[data-ed-demo] .ws .ed-up-actions button[disabled] { opacity: .55; cursor: not-allowed; }
.editor-layer.ws[data-ed-demo] .ws .ed-up-sel { display: flex; flex-wrap: wrap; gap: 3px 12px; font-size: 10.5px; color: var(--u6-ink, #3c3f38); background: var(--u6-paper, #f3f1ea); border: 1px solid var(--u6-line, #e3e0d6); border-radius: 6px; padding: 6px 8px; line-height: 1.5; }
.editor-layer.ws[data-ed-demo] .ws .ed-up-sel b { font-weight: 600; color: var(--u6-ink, #55584f); }
.editor-layer.ws[data-ed-demo] .ws .ed-up-sel .dim { color: var(--u6-ink-soft, #8a8d84); }
.editor-layer.ws[data-ed-demo] .ws .ed-up-none { font-size: 10.5px; color: var(--u6-gold, #9a6b3d); }
.editor-layer.ws[data-ed-demo] .ws .ed-up-lock { display: flex; align-items: center; gap: 5px; font-size: 10.5px; color: var(--u6-ink, #55584f); }
.editor-layer.ws[data-ed-demo] .ws .ed-up-ratio { font-size: 10.5px; color: var(--u6-ink, #55584f); line-height: 1.5; }
.editor-layer.ws[data-ed-demo] .ws .ed-up-stale { font-size: 10.5px; color: var(--u6-flag, #a3483f); line-height: 1.5; }
.editor-layer.ws[data-ed-demo] .ws .ed-up-error { font-size: 10.5px; color: var(--u6-flag, #a3483f); line-height: 1.5; }
.editor-layer.ws[data-ed-demo] .ws .ed-up-confirm { font-size: 11px; font-weight: 600; padding: 6px 12px; border-radius: 7px; border: 1px solid var(--u6-pick-deep, #2e7d5b); background: var(--u6-paper, #eef7f2); color: var(--u6-pick-deep, #1d5c42); cursor: pointer; align-self: flex-start; }
.editor-layer.ws[data-ed-demo] .ws .ed-up-confirm[disabled] { border-color: var(--u6-line, #cfcdc2); background: var(--u6-paper, #f3f1ea); color: var(--u6-ink-soft, #9a9d94); cursor: not-allowed; }
.editor-layer.ws[data-ed-demo] .ws .ed-up-status { font-size: 10.5px; line-height: 1.5; }
.editor-layer.ws[data-ed-demo] .ws .ed-up-status[data-st="ok"] { color: var(--u6-pick-deep, #1d5c42); }
.editor-layer.ws[data-ed-demo] .ws .ed-up-status[data-st="stale"] { color: var(--u6-flag, #a3483f); }
.editor-layer.ws[data-ed-demo] .ws .ed-up-status[data-st="idle"] { color: var(--u6-ink, #55584f); }
.editor-layer.ws[data-ed-demo] .ws .ed-up-logcap { font-size: 9.5px; color: var(--u6-ink-soft, #9a9d94); }
.editor-layer.ws[data-ed-demo] .ws .ed-up-log { margin: 0; padding-left: 18px; font-size: 10px; color: var(--u6-ink, #55584f); display: flex; flex-direction: column; gap: 3px; line-height: 1.5; }
.editor-layer.ws[data-ed-demo] .ws .ed-up-log li.stale { color: var(--u6-flag, #a3483f); }
.editor-layer.ws[data-ed-demo] .ws .ed-up-log li.dim { color: var(--u6-ink-soft, #9a9d94); list-style: none; margin-left: -18px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tplbar { display: flex; flex-direction: column; gap: 5px; border: 1px dashed var(--u6-line, #cfccc0); border-radius: 9px; padding: 6px; min-width: 0; }
/* K-R3（Codex 09-10 裁②）曾收敛为单一分类下拉；N0-11 定稿条1（09-11 用户截图定稿）推翻：分类直接展开为可点击、可换行 chips（select 随 DOM 移除，custom 仍为动作项语义） */
/* N0-11-R2 条2（2026-09-11 标注图）：分类=文件夹/浏览器页签——贴模板面（#f4f2ea）上沿、选中页签与模板面连为一体、
   不随模板滚走（catrow 在滚动区之外）、窄窗横向滚动。旧「pill 可换行」判据作废。 */
.editor-layer.ws[data-ed-demo] .ws .ed-wf-catrow { display: flex; flex-direction: column; gap: 3px; flex: 0 0 auto; }
/* N0-11-R5 条①（2026-09-12 红字「分类卡片需要全显示」）：nowrap+横滚藏起作废 → wrap 全显（窄窗可换两行，绝不截断/藏起）；
   页签体=语义 SVG+短名+计数（完整名进 title/aria-label，focus/hover 可读）；仍贴模板面上沿、选中缝合样式（.on）不动。 */
.editor-layer.ws[data-ed-demo] .ws .ed-wf-chips { display: flex; flex-wrap: wrap; gap: 3px; min-width: 0; overflow: visible; padding-top: 7px; border-bottom: 1px solid var(--u6-line, #dedcd3); }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-chip { flex: 0 0 auto; display: inline-flex; align-items: center; gap: 3px; border: 1px solid var(--u6-line, #dedcd3); border-bottom: none; border-radius: 8px 8px 0 0; background: var(--u6-paper, #e7e4d9); color: var(--u6-ink-soft, #6d7168); padding: 3px 8px 4px; font-size: 9.5px; font-family: inherit; cursor: pointer; white-space: nowrap; margin-bottom: -1px; pointer-events: auto; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-chip svg { flex: 0 0 auto; opacity: .72; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-chip.on svg { opacity: 1; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-chipn { font-style: normal; font-size: 8.5px; color: var(--u6-ink-soft, #8a8d84); }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-chip.on .ed-wf-chipn { color: var(--u6-pick-deep, #24503c); }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-chip:hover { color: var(--u6-ink, #33362f); background: var(--u6-paper, #edeae0); }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-chip.on { background: var(--u6-paper, #f4f2ea); color: var(--u6-pick-deep, #24503c); border-color: var(--u6-line, #c9c6ba); border-bottom: 1px solid var(--u6-line, #f4f2ea); box-shadow: inset 0 2px 0 var(--u6-pick, #2e6b4f); font-weight: 600; } /* 选中页签与模板面同底色缝合——清晰选中+一体感（条2） */
.editor-layer.ws[data-ed-demo] .ws .ed-wf-chip-custom { border-style: dashed dashed solid; } /* 动作项仍是页签形但虚线区分，恒不 lit（双 pressed 修复保持） */
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tplcur { font-size: 9.5px; color: var(--u6-pick-deep, #24503c); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-skillinfo { display: flex; flex-direction: column; gap: 1px; flex: 0 0 auto; padding: 5px 7px; border: 1px solid var(--u6-line, #eceadf); border-radius: 8px; background: var(--u6-paper, #faf8f2); }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-skillmeta { font-size: 10px; color: var(--u6-ink, #33362f); font-weight: 600; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tplmeta { font-size: 9px; color: var(--u6-ink-soft, #8a8d84); }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-skills { display: flex; flex-direction: column; flex: 0 0 auto; min-height: 0; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-skills .ed-wf-grid { max-height: 156px; overflow-y: auto; scrollbar-width: thin; padding-right: 2px; } /* 技能卡行=静态带（预设展开时带上限内滚，模板区单滚合同不破坏） */
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tiles { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 6px; } /* N0-11 条2：去 190px 内滚窗——模板随 .ed-wf-body 单滚自然铺满 */
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tile { border: 1px solid var(--u6-line, #d8d5c9); background: var(--u6-paper, #fbfaf5); border-radius: 8px; padding: 3px; cursor: pointer; display: flex; flex-direction: column; gap: 2px; min-width: 0; text-align: left; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tile img { width: 100%; aspect-ratio: 1 / 1; height: auto; object-fit: contain; border-radius: 5px; background: var(--u6-paper, #dddbd1); } /* K-R3 裁②：方块完整预览——正方形轨道内 contain 不裁切（旧固定高+cover 会切掉构图） */
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tile span { font-size: 8.5px; color: var(--u6-ink, #55584f); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tile.on { border-color: var(--u6-pick-deep, #2e6b4f); box-shadow: inset 0 0 0 1px var(--u6-pick, #2e6b4f); }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tile .ed-wf-noimg { display: none; font-style: normal; font-size: 8.5px; color: var(--u6-flag, #a3483f); }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tile.noimg .ed-wf-noimg { display: block; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tplpending { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; background: var(--u6-paper, #f6e9d8); border: 1px solid var(--u6-gold, #d9b98c); border-radius: 8px; padding: 5px 7px; font-size: 10px; color: var(--u6-gold, #6b4d1e); }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tplpending[hidden] { display: none; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tplpending span { flex: 1; min-width: 120px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tplpending button { border: 1px solid var(--u6-gold, #b98f4e); background: var(--u6-paper, #fffaf0); color: var(--u6-gold, #6b4d1e); border-radius: 7px; padding: 3px 8px; font-size: 10px; cursor: pointer; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tplpending button:first-of-type { background: var(--u6-gold, #8a5a12); color: #fff; border-color: var(--u6-gold, #8a5a12); }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tplmod, .editor-layer.ws[data-ed-demo] .ws .ed-wf-tplsel { font-size: 9.5px; color: var(--u6-pick, #5d7f68); }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-adv { border-top: 1px dashed var(--u6-line, #cfccc0); padding-top: 6px; }
/* K-R3 裁③：详细设置真开合入口——隐藏原生三角 marker，唯一指示为动态 SVG chevron（随 open 翻转、prefers-reduced-motion 下零动画） */
.editor-layer.ws[data-ed-demo] .ws .ed-wf-advs { cursor: pointer; font-size: 10.5px; color: var(--u6-ink, #55584f); list-style: none; display: flex; align-items: center; gap: 5px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-advs::-webkit-details-marker { display: none; }
.editor-layer.ws[data-ed-demo] .ws .ed-advs-chev { display: inline-flex; width: 12px; height: 12px; color: var(--u6-ink-soft, #9a9d94); transition: transform .18s ease; }
.editor-layer.ws[data-ed-demo] .ws .ed-advs-chev svg { width: 12px; height: 12px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-adv[open] .ed-advs-chev { transform: rotate(180deg); color: var(--u6-pick-deep, #2e6b4f); }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-advs:focus-visible { outline: 2px solid var(--u6-pick-deep, #2e6b4f); outline-offset: 2px; }
@media (prefers-reduced-motion: reduce) { .editor-layer.ws[data-ed-demo] .ws .ed-advs-chev { transition: none; } }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-adv .ed-wf-params { margin-top: 6px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-reset { flex: 1; border: 1px solid var(--u6-line, #cfccc0); background: var(--u6-paper, #fbfaf5); color: var(--u6-ink, #55584f); border-radius: 8px; padding: 5px 8px; font-size: 10.5px; cursor: pointer; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-adverr { color: var(--u6-flag, #a3483f); font-size: 10px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-adverr[hidden] { display: none; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tipslot { flex: 0 0 auto; min-height: 2.9em; box-sizing: border-box; background: var(--u6-paper, #efece1); border: 1px solid var(--u6-line, #dedcd3); border-radius: 8px; padding: 5px 7px; font-size: 10px; line-height: 1.45; color: var(--u6-ink, #55584f); }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-importpanel { gap: 6px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-importpanel strong { font-size: 11px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-importpanel textarea {
  width: 100%;
  box-sizing: border-box;
  border: 1px solid var(--u6-line, #cfccc0);
  border-radius: 7px;
  font-size: 10px;
  font-family: ui-monospace, monospace;
  padding: 5px 6px;
}
.editor-layer.ws[data-ed-demo] .ws .ed-wf-importpanel button {
  align-self: flex-start;
  border: 0;
  background: var(--u6-dark, #3d4c44);
  color: #f4f2ea;
  border-radius: 7px;
  padding: 4px 10px;
  font-size: 10.5px;
  cursor: pointer;
}
/* N0-11 条4：.ed-wf-main/.ed-wf-maininfo 规则随 DOM 移除——「当前卡/文件名」重复信息退出主面，来源记录迁 .ed-wf-src（底部详细区） */
.editor-layer.ws[data-ed-demo] .ws .ed-wf-params { display: flex; flex-direction: column; gap: 7px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-field { display: flex; flex-direction: column; gap: 3px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-field > span { font-size: 10.5px; color: var(--u6-ink, #55584f); }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-field > span i { font-style: normal; color: var(--u6-ink-soft, #9a9d94); margin-left: 5px; font-size: 9px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-field input,
.editor-layer.ws[data-ed-demo] .ws .ed-wf-field textarea,
.editor-layer.ws[data-ed-demo] .ws .ed-wf-field select {
  border: 1px solid var(--u6-line, #cfccc0);
  border-radius: 7px;
  background: var(--u6-paper, #fbfaf5);
  font-size: 11.5px;
  font-family: inherit;
  padding: 4px 7px;
  color: var(--u6-ink, #33362f);
}
.editor-layer.ws[data-ed-demo] .ws .ed-wf-param-err { color: var(--u6-flag, #a3483f); font-size: 10px; font-style: normal; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-actions { display: flex; gap: 7px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-run {
  flex: 1;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 5px;
  border: 1px dashed var(--u6-line, #b3b0a4);
  background: rgba(250, 249, 244, .92);
  color: var(--u6-ink-soft, #858882);
  border-radius: 8px;
  padding: 5px 8px;
  font-size: 10.5px;
}
.editor-layer.ws[data-ed-demo] .ws .ed-wf-call {
  flex: 1;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 5px;
  border: 0;
  background: var(--u6-pick-deep, #2e6b4f);
  color: #fff;
  border-radius: 8px;
  padding: 5px 8px;
  font-size: 10.5px;
  cursor: pointer;
}
.editor-layer.ws[data-ed-demo] .ws .ed-wf-calljson {
  max-height: 170px;
  overflow: auto;
  background: var(--u6-dark, #22271f);
  color: #dfe6dc;
  font-size: 9.5px;
  line-height: 1.5;
  padding: 8px;
  border-radius: 8px;
  white-space: pre-wrap;
  word-break: break-all;
  margin: 0;
}
.editor-layer.ws[data-ed-demo] .ws .ed-wf-error { color: var(--u6-flag, #a3483f); font-size: 10.5px; margin: 0; }
@media (prefers-reduced-motion: reduce) {
  .editor-layer.ws[data-ed-demo] .ed-toolbar,
  .editor-layer.ws[data-ed-demo] .ed-history,
  .editor-layer.ws[data-ed-demo] .ed-wf-panel,
  .editor-layer.ws[data-ed-demo] .ed-tool,
  .editor-layer.ws[data-ed-demo] .ed-hist-item,
  .editor-layer.ws[data-ed-demo] .ed-chev,
  .editor-layer.ws[data-ed-demo] .ed-wf-preset,
  .editor-layer.ws[data-ed-demo] .ed-composer,
  .editor-layer.ws[data-ed-demo] .ed-compare,
  .editor-layer.ws[data-ed-demo] .ed-cmp-pane,
  .editor-layer.ws[data-ed-demo] .ed-cmp-linkbtn { transition: none !important; }
}

/* ===== BOT-IMAGE-EDITOR-DEMO-D R1：只读徽标 / 写类工具禁用态 / 提示词写失败注记 ===== */
.editor-layer.ws .ed-robadge{align-self:stretch;display:block;text-align:center;font-style:normal;font-size:10px;line-height:1.35;letter-spacing:.08em;color:var(--u6-gold, #8a5a12);background:color-mix(in srgb, var(--u6-gold, #c9781e) 16%, transparent);border:1px solid color-mix(in srgb, var(--u6-gold, #b27a1a) 50%, transparent);border-radius:5px;padding:3px 2px;margin:0 0 4px} /* UI E：工具列改浅色工作面，只读徽标随之改深字 */
.editor-layer.ws .ed-tool[disabled]{opacity:.36;cursor:not-allowed}
.editor-layer.ws .ed-tool[disabled]:hover{background:transparent;color:inherit}
.editor-layer.ws .ed-wf-panel textarea[disabled],.editor-layer.ws .ed-wf-panel input[disabled],.editor-layer.ws .ed-wf-panel select[disabled],.editor-layer.ws .ed-composer input[disabled],.editor-layer.ws .ed-composer select[disabled]{opacity:.6;cursor:not-allowed;background:rgba(255,255,255,.04)} /* N0-11 条3：输入面迁入底部区后只读禁用态同合同覆盖 */
.editor-layer.ws .ed-wf-failnote{display:none;font-size:11px;color:var(--u6-gold, #e8a850);margin-top:2px}
.editor-layer.ws .ed-wf-failnote.on{display:block}

/* ===== CANVAS-IMPORT-PRESENTATION-J（2026-09-09）：导入图片卡去软件灰衬底/阴影 =====
   仅作用于导入图片卡图元：背景透明（旧矩形余白透出画布纸底，原图自带白底由像素保留）、零阴影；
   卡壳本就无框（W1-AP）。asset/视频衬底语义不动。object-fit:contain 原样——不裁切、不拉伸。 */
.imported-single-image .canvas-real-image { background: transparent; box-shadow: none; }

/* ===== IMGFIX-L（2026-09-18 主审裁决，翻案 J「零阴影」）：图片显示应有阴影，且阴影必须跟【可视像素】——
   卡级 box-shadow 禁用（锚在外框，拟合前悬空/拟合后含 caption 带，皆错位）。filter:drop-shadow 作用于
   object-fit:contain 实际渲染像素轮廓。范围=画布图卡 img（组堆 .group-real-image / 编辑器 .editor-real-image 不中）。 */
.canvas-card .canvas-real-image { filter: var(--sh-image-rest); }

/* ===== CANVAS-EDITOR-K-R1（2026-09-09）：四列布局 / 动态 chevron / 面板级模板栏 / 右下常驻 Agent 输入 / 版本比较层 =====
   仅呈现层：列数与几何事实由套件断言（K-A1/A2/A3/A4/A5、K-B1、K-C*、K-P*）。 */

/* A1/A2：紧凑态技能卡四列（1440/1280 实测均 4）；最大化态沿用 G6.5 冻结合同 3 列（4139 不动）。
   卡维持「无外层大边框」语义（transparent border 仅 hover 显影）；图标固有 52px 沿用 G6.1/G8.1 的 48–56 合同，不缩。 */
.editor-layer.ws[data-ed-demo] .ws .ed-wf-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 6px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-card { padding: 6px 2px 4px; gap: 4px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-cardname { font-size: 9.5px; }
/* B1：动态 chevron——随 aria-expanded 翻转（下=可展开、上=已展开），非齿轮、不常驻长参数 */
.editor-layer.ws[data-ed-demo] .ws .ed-wf-card { position: relative; }
.editor-layer.ws[data-ed-demo] .ws .ed-chev { position: absolute; right: 4px; bottom: 5px; width: 12px; height: 12px; display: inline-flex; color: var(--u6-ink-soft, #9a9d94); transition: transform .18s ease; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-card[aria-expanded="true"] .ed-chev { transform: rotate(180deg); color: var(--u6-pick-deep, #2e6b4f); }

/* A3/A4：面板级模板栏（父分类一个入口组 + 子模板四列方块完整预览/短名/悬停说明；101 模板+自定义不缩减） */
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tplbar { flex: 0 0 auto; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tiles { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 5px; } /* N0-11 条2：四列保留、去 158px 截断内滚——模板持续向下铺满剩余高度 */
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tile { padding: 3px; }
/* K-R3 裁②：撤 38px 固定高+cover（会裁切构图）——完整 contain 方块预览改由基础规则（aspect-ratio 1/1）承载 */
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tile span { font-size: 8px; }

/* C：右侧底部常驻输入（唯一主输入态——切模板/收面板不丢补充）。
   N0-11 定稿条3/4：底部区=rail 尾段 flex 列（属性区→配置行→正文），不再固定 96 高/双 absolute；
   发送钮=唯一提交口、置正文右下；长正文限高内滚不撑破。 */
.editor-layer.ws[data-ed-demo] .ws .ed-composer {
  position: static;
  flex: 0 0 120px; /* EB-P0 A3（COMPOSER-SEND-P0②）：底部整行=图片+提示词+按钮加高——live 基线 96px +24=120px（两视口实测不溢出，图片仍居左非全屏）；上下缘与资产缩略图栏对齐合同沿 09-11，仅带高变 */
  height: 120px;
  margin-top: auto;
  min-width: 0;
  box-sizing: border-box;
  display: flex;
  flex-direction: column;
  gap: 6px;
  background: var(--u6-paper, #f4f2ea);
  border-left: 1px solid var(--u6-line, #dedcd3);
  border-top: 1px solid var(--u6-line, #dedcd3);
  padding: 8px 12px;
  font-size: 11px;
  color: var(--u6-ink, #3a3d38);
  z-index: 8;
  pointer-events: auto;
}
.editor-layer.ws[data-ed-demo] .ws .ed-attrzone { flex: 0 0 auto; min-width: 0; } /* 段A 当前工具属性区（条3：不浮画布顶） */
.editor-layer.ws[data-ed-demo] .ws .ed-attrzone:empty { display: none; }
.editor-layer.ws[data-ed-demo] .ws .ed-c-body { flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column; gap: 4px; min-width: 0; } /* 段C 唯一正文：填满底部横行带（A3 起 120px） */
.editor-layer.ws[data-ed-demo] .ws .ed-c-tawrap { flex: 1 1 auto; min-height: 0; display: flex; gap: 6px; } /* EB-P0 A3（③）：正文+右侧常显提交钮=同行左右分列（钮不再是正文内角标，position:relative 随绝对定位一并撤除） */
.editor-layer.ws[data-ed-demo] .ws .ed-c-row { display: flex; align-items: center; gap: 6px; min-width: 0; }
.editor-layer.ws[data-ed-demo] .ws .ed-composer textarea {
  flex: 1 1 auto; /* EB-P0 A3（③）：正文占行内剩余宽度，右让 44px 钮列——不再整幅+角标压字 */
  min-width: 0;
  min-height: 0;
  height: 100%; /* 条6（纠正版）：正文填满横行带（A3 起 120px）——限高由带几何恒定保证，超长内部滚动，永不撑破 */
  box-sizing: border-box;
  resize: none;
  overflow-y: auto;
  border: 1px solid var(--u6-line, #cfccc0);
  border-radius: 7px;
  background: var(--u6-paper, #fbfaf5);
  font-size: 11.5px;
  font-family: inherit;
  padding: 4px 7px; /* EB-P0 A3（③）：钮移出正文右下角→底部留白带撤销，全文可用高度增加 */
  color: var(--u6-ink, #33362f);
}
.editor-layer.ws[data-ed-demo] .ws .ed-composer textarea[disabled] { opacity: .6; cursor: not-allowed; }
.editor-layer.ws[data-ed-demo] .ws .ed-c-mode { flex: 0 0 auto; border: 1px solid var(--u6-line, #d8d5c9); background: var(--u6-paper, #fbfaf5); color: var(--u6-ink, #55584f); border-radius: 7px; padding: 3px 8px; font-size: 9.5px; font-family: inherit; cursor: pointer; }
.editor-layer.ws[data-ed-demo] .ws .ed-c-mode.on { border-color: var(--u6-pick-deep, #2e6b4f); background: var(--u6-paper, #eef4ef); color: var(--u6-pick-deep, #24503c); } /* 条4 显式模式：互斥选中、克制浅底 */
.editor-layer.ws[data-ed-demo] .ws .ed-c-send { border-radius: 9px; font-size: 10.5px; } /* EB-P0 A3（③）：唯一提交口=正文右侧常显侧栏列（定稿条4 的「右下内锚」随钮出框作废）；可点/禁用配色沿 .ed-wf-run 诚实态机，不自造第二套。几何见条I块 */
.editor-layer.ws[data-ed-demo] .ws .ed-c-send[disabled] { cursor: not-allowed; }
.editor-layer.ws[data-ed-demo] .ws .ed-c-status { flex: 1; min-width: 0; font-size: 9.5px; color: var(--u6-ink-soft, #8a8d84); overflow: hidden; line-height: 1.3; } /* K-R3：状态文案承载「主输入=本机草稿」长句，允许换行不再单行截断 */
.editor-layer.ws[data-ed-demo] .ws .ed-composer [data-ed-c-note] { display: none; font-size: 9.5px; color: var(--u6-flag, #a3483f); } /* 主输入写失败诚实注记（与提示词侧 ws-draftnote 同语义、不同锚点不串） */
.editor-layer.ws[data-ed-demo] .ws .ed-composer [data-ed-c-note].on { display: block; }

/* P：历史多选（Ctrl+点击）呈现 + 比较入口 */
.editor-layer.ws[data-ed-demo] .ws .ed-hist-item[aria-selected="true"] { border-color: var(--u6-pick-deep, #2e6b4f); background: var(--u6-paper, #eaf2ec); }
.editor-layer.ws[data-ed-demo] .ws .ed-cmp-open {
  position: sticky;
  right: 0;
  flex: 0 0 auto;
  align-self: center;
  border: 1px solid #2e6b4f;
  background: #eaf2ec;
  color: #24503c;
  border-radius: 999px;
  padding: 3px 10px;
  font-size: 10px;
  cursor: pointer;
}
/* 比较层：只读呈现（不改配方/不新增版本/不写原图）；pane canvas 按各自纵横自绘——无拉伸裁图 */
.editor-layer.ws[data-ed-demo] .ws .ed-compare {
  position: absolute;
  inset: 54px 46px 104px 54px;
  z-index: 30;
  box-sizing: border-box;
  display: flex;
  flex-direction: column;
  gap: 8px;
  overflow: auto;
  background: rgba(19, 24, 20, .97);
  border: 1px solid #3a4038;
  border-radius: 12px;
  padding: 10px 12px;
  color: #e8e6dc;
  font-size: 11px;
}
.editor-layer.ws[data-ed-demo] .ws .ed-cmp-head { display: flex; align-items: center; gap: 10px; flex: 0 0 auto; }
.editor-layer.ws[data-ed-demo] .ws .ed-cmp-head strong { font-size: 12.5px; }
.editor-layer.ws[data-ed-demo] .ws .ed-cmp-sub { flex: 1; font-size: 9.5px; color: #9aa197; }
.editor-layer.ws[data-ed-demo] .ws .ed-cmp-linkbtn { border: 1px solid #2e6b4f; background: #24402f; color: #cfe6d6; border-radius: 7px; padding: 3px 9px; font-size: 10px; cursor: pointer; }
.editor-layer.ws[data-ed-demo] .ws .ed-cmp-linkbtn[aria-pressed="false"] { border-color: #5b6157; background: transparent; color: #9aa197; text-decoration: line-through; }
.editor-layer.ws[data-ed-demo] .ws .ed-cmp-x { border: 0; background: transparent; color: #cfd2c8; cursor: pointer; display: inline-flex; }
.editor-layer.ws[data-ed-demo] .ws .ed-cmp-split { flex: 0 0 auto; display: flex; flex-direction: column; gap: 4px; border: 1px dashed #4a5147; border-radius: 10px; padding: 6px 8px; }
.editor-layer.ws[data-ed-demo] .ws .ed-cmp-splitstage { position: relative; height: 260px; overflow: hidden; background: #10140f; border-radius: 8px; }
.editor-layer.ws[data-ed-demo] .ws .ed-cmp-splitstage canvas { position: absolute; inset: 0; margin: auto; transform-origin: center; max-width: 100%; }
.editor-layer.ws[data-ed-demo] .ws .ed-cmp-splitstage canvas.top { z-index: 2; }
.editor-layer.ws[data-ed-demo] .ws .ed-cmp-tag { position: absolute; top: 6px; z-index: 3; font-style: normal; font-size: 9.5px; background: rgba(16, 20, 15, .8); color: #dfe4da; border: 1px solid #4a5147; border-radius: 6px; padding: 2px 7px; }
.editor-layer.ws[data-ed-demo] .ws .ed-cmp-tag.left { left: 6px; }
.editor-layer.ws[data-ed-demo] .ws .ed-cmp-tag.right { right: 6px; }
.editor-layer.ws[data-ed-demo] .ws .ed-cmp-slider { display: flex; align-items: center; gap: 8px; font-size: 9.5px; color: #9aa197; }
.editor-layer.ws[data-ed-demo] .ws .ed-cmp-slider input { flex: 1; accent-color: #2e6b4f; }
.editor-layer.ws[data-ed-demo] .ws .ed-cmp-lay { flex: 0 0 auto; display: grid; gap: 10px; }
.editor-layer.ws[data-ed-demo] .ws .ed-cmp-pane { margin: 0; min-width: 0; border: 1px solid #3a4038; border-radius: 10px; background: #171b16; padding: 8px; display: flex; flex-direction: column; gap: 6px; }
.editor-layer.ws[data-ed-demo] .ws .ed-cmp-pane canvas { display: block; margin: 0 auto; max-width: 100%; transform-origin: center; object-fit: contain; }
.editor-layer.ws[data-ed-demo] .ws .ed-cmp-pane figcaption { font-size: 9.5px; color: #b9bcae; text-align: center; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.editor-layer.ws[data-ed-demo] .ws .ed-cmp-note { color: #9aa197; line-height: 1.5; }

/* ===== CANVAS-EDITOR-K-R2（2026-09-09）：工具回填——右栏滚动适配 / 分隔符 / 线型与开关小按钮 / 面板换行 / 图层控件 ===== */
.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 { display: none; }
.editor-layer.ws[data-ed-demo] .ws .ed-tsep { flex: 0 0 auto; width: 22px; height: 0; border-top: 1px solid var(--u6-line, #d3d1c7); margin: 3px 0; }
/* 面板换行：形状/图层控件变多，仍右上角悬浮、不遮绘制区中部 */
.editor-layer.ws[data-ed-demo] .ws .ed-brushpanel { flex-wrap: wrap; max-width: min(560px, calc(100% - 116px)); row-gap: 5px; }
.editor-layer.ws[data-ed-demo] .ws .ed-brush-sep { flex: 0 0 auto; width: 1px; height: 18px; background: rgba(232, 230, 221, .28); }
.editor-layer.ws[data-ed-demo] .ws .ed-ls { flex: 0 0 auto; border: 1px solid rgba(255, 255, 255, .22); border-radius: 7px; background: transparent; color: #cfd3cb; font-size: 10.5px; line-height: 1; padding: 4px 7px; cursor: pointer; }
.editor-layer.ws[data-ed-demo] .ws .ed-ls:hover { border-color: rgba(255, 255, 255, .5); color: #fff; }
.editor-layer.ws[data-ed-demo] .ws .ed-ls.on, .editor-layer.ws[data-ed-demo] .ws .ed-ls[aria-pressed="true"] { background: #efce6e; border-color: #efce6e; color: #2c3026; }
.editor-layer.ws[data-ed-demo] .ws .ed-pl-hint { color: #9aa197; font-size: 10px; font-style: normal; }
.editor-layer.ws[data-ed-demo] .ws .ed-text-sel { background: #171b16; color: #e8e6dd; border: 1px solid rgba(255, 255, 255, .22); border-radius: 7px; font-size: 10.5px; padding: 3px 5px; }
.editor-layer.ws[data-ed-demo] .ws .ed-ov-file { display: inline-flex; align-items: center; gap: 5px; color: #cfd3cb; font-size: 10px; }
.editor-layer.ws[data-ed-demo] .ws .ed-ov-file input[type="file"] { color: #cfd3cb; font-size: 10px; max-width: 190px; }
.editor-layer.ws[data-ed-demo] .ws .ed-ov-rm { border-color: rgba(201, 55, 44, .65); color: #e8a49e; }
.editor-layer.ws[data-ed-demo] .ws .ed-ov-rm:hover { border-color: #c9372c; color: #ffd9d3; }

/* ===== CANVAS-EDITOR-L（2026-09-09）：Flux2 真实链路——诚实运行态 / 蒙版面板 / 状态回执 ===== */
/* 运行钮仅探针 200 才亮（无取消能力，界面不提供假取消）；未接通维持 K 的禁用虚线态 */
.editor-layer.ws[data-ed-demo] .ws .ed-wf-run:not([disabled]) { border-style: solid; border-color: var(--u6-pick-deep, #2e6b4f); background: var(--u6-pick-deep, #2e6b4f); color: #fff; cursor: pointer; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-run:not([disabled]):hover { background: var(--u6-pick-deep, #275c44); border-color: var(--u6-pick-deep, #275c44); }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-rstat { margin: 5px 0 0; font-size: 10px; line-height: 1.5; color: var(--u6-ink-soft, #6d7168); overflow-wrap: anywhere; white-space: pre-wrap; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-maskstat { display: block; margin: 7px 0 2px; font-size: 10px; color: var(--u6-ink-soft, #8a5f70); }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-masknote { display: block; margin-top: 5px; font-size: 10px; font-style: normal; color: var(--u6-ink-soft, #9aa197); }
/* 蒙版面板复用 ed-brushpanel 几何，仅以品红描边呼应画布提示色（白=重绘区，与编辑标注分离） */
.editor-layer.ws[data-ed-demo] .ws .ed-maskpanel { border-color: rgba(235, 70, 130, .45); }
.editor-layer.ws[data-ed-demo] .ws .ed-maskpanel .ed-brush-label { color: #eec7d4; }

/* ===== CANVAS-EDITOR-N0-11（2026-09-11）：底部三段属性区浅色化 + 紧凑配置行（定稿条3/5，Bills 风） =====
   段A 属性区并入 composer 首段后必须脱离暗色悬浮皮（原面板为画布右上深色悬浮设计）；
   段B 配置行=通道/技能/LoRA/比例/数量单行可换行 + mock 诚实徽标 + 详细设置折叠；均浅色面、克制选中态。 */
.editor-layer.ws[data-ed-demo] .ws .ed-attrzone .ed-brushpanel:not(.ed-topt-pop) { position: static; left: auto; right: auto; top: auto; z-index: auto; max-width: 100%; background: var(--u6-paper, #fbfaf5); border: 1px solid var(--u6-line, #dedcd3); border-radius: 10px; box-shadow: var(--sh-rest); }
/* ===== N0-11-R2 条3（2026-09-11 标注图）：紧凑工具选项触发钮 + 向上弹出锚定菜单（浅色 Bills 风） ===== */
.editor-layer.ws[data-ed-demo] .ws .ed-toolopts { position: relative; display: flex; flex-wrap: wrap; align-items: center; gap: 4px; min-height: 24px; }
.editor-layer.ws[data-ed-demo] .ws .ed-topt { display: inline-flex; align-items: center; gap: 4px; border: 1px solid var(--u6-line, #dedcd3); background: var(--u6-paper, #fbfaf5); color: var(--u6-ink, #55584f); border-radius: 999px; padding: 2px 8px; font-size: 9.5px; font-family: inherit; cursor: pointer; white-space: nowrap; }
.editor-layer.ws[data-ed-demo] .ws .ed-topt:hover { border-color: var(--u6-line, #9fb2a4); color: var(--u6-ink, #33362f); }
.editor-layer.ws[data-ed-demo] .ws .ed-topt[aria-expanded="true"] { border-color: var(--u6-pick-deep, #2e6b4f); color: var(--u6-pick-deep, #24503c); background: var(--u6-paper, #eef4ef); box-shadow: inset 0 0 0 1px var(--u6-pick, #2e6b4f); }
.editor-layer.ws[data-ed-demo] .ws .ed-topt-act[aria-pressed="true"] { border-color: var(--u6-pick-deep, #2e6b4f); color: var(--u6-pick-deep, #24503c); background: var(--u6-paper, #eef4ef); }
.editor-layer.ws[data-ed-demo] .ws .ed-topt-sw { width: 10px; height: 10px; border-radius: 50%; background: var(--sw, #c9372c); border: 1px solid rgba(20, 26, 22, .25); flex: 0 0 auto; }
.editor-layer.ws[data-ed-demo] .ws .ed-topt-v { color: var(--u6-ink-soft, #8a8d84); font-weight: 400; }
.editor-layer.ws[data-ed-demo] .ws .ed-topt-pop { position: absolute; top: auto; right: auto; bottom: calc(100% + 6px); left: 0; z-index: 30; width: 240px; max-width: 100%; box-sizing: border-box; align-items: stretch; flex-wrap: nowrap; background: var(--u6-paper, #fbfaf5); border: 1px solid var(--u6-line, #dedcd3); border-radius: 10px; box-shadow: var(--sh-lift); padding: 8px; display: flex; flex-direction: column; gap: 6px; overflow-y: auto; pointer-events: auto; } /* 锚定触发钮上方展开·内部滚动·绝不遮底部对话/资产（在它们上方开口）；top/right:auto 显式中和旧悬浮面板 top:16px/right:58px 泄漏（否则 top+bottom 双约束把菜单压扁） */
.editor-layer.ws[data-ed-demo] .ws .ed-topt-pop[hidden] { display: none; }
.editor-layer.ws[data-ed-demo] .ws .ed-topt-pop .ed-color { border-color: rgba(20, 26, 22, .22); }
.editor-layer.ws[data-ed-demo] .ws .ed-topt-pop .ed-topt-row { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; } /* 菜单内离散项（色板/线型/填充/阴阳文/背景框）横排成组，纵向堆叠只是控件行 */
.editor-layer.ws[data-ed-demo] .ws .ed-topt-pop .ed-topt-row .ed-color { flex: 0 0 22px; width: 22px; height: 22px; }
.editor-layer.ws[data-ed-demo] .ws .ed-topt-pop .ed-brush-w { color: var(--u6-ink-soft, #6d7168); }
.editor-layer.ws[data-ed-demo] .ws .ed-topt-pop input[type="range"] { accent-color: var(--u6-pick-deep, #2e6b4f); }
.editor-layer.ws[data-ed-demo] .ws .ed-attrzone .ed-brush-label { color: var(--u6-ink, #55584f); }
.editor-layer.ws[data-ed-demo] .ws .ed-attrzone .ed-brush-w { color: var(--u6-ink-soft, #6d7168); }
.editor-layer.ws[data-ed-demo] .ws .ed-attrzone .ed-brushpanel input[type="range"] { accent-color: var(--u6-pick-deep, #2e6b4f); }
.editor-layer.ws[data-ed-demo] .ws .ed-attrzone .ed-color { border-color: rgba(20, 26, 22, .22); }
.editor-layer.ws[data-ed-demo] .ws .ed-attrzone .ed-color.on { border-color: var(--u6-pick-deep, #2e6b4f); box-shadow: 0 0 0 2px rgba(46, 107, 79, .28); }
.editor-layer.ws[data-ed-demo] .ws .ed-attrzone .ed-ls,
.editor-layer.ws[data-ed-demo] .ws .ed-attrzone .ed-ls:hover { border-color: var(--u6-line, #d8d5c9); color: var(--u6-ink, #55584f); }
.editor-layer.ws[data-ed-demo] .ws .ed-attrzone .ed-ls:hover { border-color: var(--u6-line, #9fb2a4); color: var(--u6-ink, #33362f); }
.editor-layer.ws[data-ed-demo] .ws .ed-attrzone .ed-ls.on,
.editor-layer.ws[data-ed-demo] .ws .ed-attrzone .ed-ls[aria-pressed="true"] { background: var(--u6-paper, #eef4ef); border-color: var(--u6-pick-deep, #2e6b4f); color: var(--u6-pick-deep, #24503c); } /* 条5：选中=浅底描边，沿面板黄底高亮在浅色面不可读的问题 */
.editor-layer.ws[data-ed-demo] .ws .ed-attrzone .ed-brush-sep { background: var(--u6-paper, #dedcd3); }
.editor-layer.ws[data-ed-demo] .ws .ed-attrzone .ed-pl-hint { color: var(--u6-ink-soft, #8a8d84); }
.editor-layer.ws[data-ed-demo] .ws .ed-attrzone .ed-text-sel { background: var(--u6-paper, #fbfaf5); color: var(--u6-ink, #33362f); border-color: var(--u6-line, #d8d5c9); }
.editor-layer.ws[data-ed-demo] .ws .ed-attrzone .ed-ov-file { color: var(--u6-ink, #55584f); }
.editor-layer.ws[data-ed-demo] .ws .ed-attrzone .ed-ov-file input[type="file"] { color: var(--u6-ink, #55584f); }
.editor-layer.ws[data-ed-demo] .ws .ed-attrzone .ed-ov-rm { border-color: color-mix(in srgb, var(--u6-flag, #c9372c) 50%, transparent); color: var(--u6-flag, #a3483f); }
.editor-layer.ws[data-ed-demo] .ws .ed-attrzone .ed-ov-rm:hover { border-color: var(--u6-flag, #c9372c); color: var(--u6-flag, #8f2f25); }
.editor-layer.ws[data-ed-demo] .ws .ed-attrzone .ed-maskpanel { border-color: #d9a8bd; }
.editor-layer.ws[data-ed-demo] .ws .ed-attrzone .ed-maskpanel .ed-brush-label { color: var(--u6-ink-soft, #8a5f70); }
.editor-layer.ws[data-ed-demo] .ws .ed-cfg { flex: 0 0 auto; border-top: 1px dashed var(--u6-line, #dedcd3); padding-top: 6px; display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.editor-layer.ws[data-ed-demo] .ws .ed-c-cfgrow { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 5px; font-size: 10px; }
.editor-layer.ws[data-ed-demo] .ws .ed-c-item { display: inline-flex; align-items: center; gap: 4px; min-width: 0; border: 1px solid var(--u6-line, #d8d5c9); background: var(--u6-paper, #fbfaf5); color: var(--u6-ink, #33362f); border-radius: 7px; padding: 2px 7px; font-size: 9.5px; }
.editor-layer.ws[data-ed-demo] .ws .ed-c-chan select { border: 1px solid var(--u6-line, #d8d5c9); background: var(--u6-paper, #fffdf7); color: var(--u6-ink, #33362f); border-radius: 6px; padding: 1px 4px; font-size: 9.5px; font-family: inherit; cursor: pointer; max-width: 190px; }
.editor-layer.ws[data-ed-demo] .ws .ed-c-mock { flex: 0 0 auto; font-size: 9px; color: var(--u6-gold, #8a5a12); background: color-mix(in srgb, var(--u6-gold, #c9781e) 16%, transparent); border: 1px solid color-mix(in srgb, var(--u6-gold, #b27a1a) 50%, transparent); border-radius: 5px; padding: 2px 6px; } /* §7.1 诚实未接通徽标（沿只读徽标琥珀语汇） */
.editor-layer.ws[data-ed-demo] .ws .ed-wf-rstat { margin: 0; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tipslot { min-height: 0; background: transparent; border: 0; border-top: 1px dashed var(--u6-line, #e4e2d8); border-radius: 0; padding: 4px 2px 0; color: var(--u6-ink-soft, #6d7168); } /* 提示槽进底部段：单行起、按需增高，保留 2.9em 死高会挤占模板区 */
.editor-layer.ws[data-ed-demo] .ws .ed-wf-src { font-size: 9px; color: var(--u6-ink-soft, #8a8d84); line-height: 1.45; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-offnote { font-style: normal; color: var(--u6-flag, #a3483f); }
/* 纠正版几何（吸收 CLI UXTEST-assetrow-r1 末尾合同）：资产缩略图栏右侧给正文带让宽——宽度经 ResizeObserver 变量实时同步，杜绝覆盖缩略图 */
.editor-layer.ws[data-ed-demo] .ws .ed-history { right: calc(46px + var(--preview-composer-width, 340px)); }

/* ===== N0-11-R3（2026-09-11 Codex 精简派单）：配置行单行 pill+上拉 / 技能带紧凑去大卡 / 工程文案下线 ===== */
/* 条③ 配置行=严格单行：pill 不再逐项占行（旧 flex-wrap:wrap=「多行膨胀」根因作废）；
   上拉菜单 absolute 挂在行内——本行与其祖先不得 overflow 裁切（旧 .ed-cfg 150px 内滚帽同步解除）。 */
.editor-layer.ws[data-ed-demo] .ws .ed-wf-foot .ed-cfg { max-height: none; overflow: visible; } /* R5 条④：载体 rail-bottom→面板尾段，150px 帽解除合同原样保持 */
.editor-layer.ws[data-ed-demo] .ws .ed-c-cfgrow { position: relative; flex-wrap: nowrap; overflow: visible; gap: 3px; }
/* N0-11-R5 条③：pill 体=图标+当前值（常驻标签撤下进 title/aria-label）；比例呈缩写比（1:1，全像素进 title/菜单）。
   AFTER 实屏证实（09-12 看图）：仅去标签仍全线截断（340px 列内容总宽~371px）→ 行内边距/gap 收紧使缩写值单行全显；
   放不下仍 ellipsis 兜底（长自定义通道名——收缩优先落在可截断的 chan pill），完整值菜单可读。 */
.editor-layer.ws[data-ed-demo] .ws .ed-c-cfgrow .ed-cfg-pill { flex: 0 1 auto; min-width: 0; padding: 2px 6px; gap: 3px; }
.editor-layer.ws[data-ed-demo] .ws .ed-c-cfgrow .ed-cfg-pill svg { flex: 0 0 auto; opacity: .72; }
.editor-layer.ws[data-ed-demo] .ws .ed-c-cfgrow .ed-c-mock { padding: 1px 5px; font-size: 8.5px; }
.editor-layer.ws[data-ed-demo] .ws .ed-c-cfgrow .ed-topt-v { overflow: hidden; text-overflow: ellipsis; min-width: 0; }
.editor-layer.ws[data-ed-demo] .ws .ed-c-cfgrow .ed-c-item { flex: 0 1 auto; min-width: 0; } /* 蒙版短状态同带内收缩，不撑出第二行 */
/* 配置行上拉菜单：浅色面内的选项/能力说明/尺寸控件/详细参数（技术细节按条②移入此处） */
.editor-layer.ws[data-ed-demo] .ws .ed-cfg-pop { width: 260px; }
.editor-layer.ws[data-ed-demo] .ws .ed-cfg-pop .ed-cfg-opts { display: flex; flex-direction: column; gap: 4px; }
.editor-layer.ws[data-ed-demo] .ws .ed-cfg-pop .ed-cfg-opt { text-align: left; justify-content: flex-start; }
.editor-layer.ws[data-ed-demo] .ws .ed-cfg-pop .ed-ls,
.editor-layer.ws[data-ed-demo] .ws .ed-cfg-pop .ed-ls:hover { border-color: var(--u6-line, #d8d5c9); color: var(--u6-ink, #55584f); } /* 基 .ed-ls 为暗底语汇——浅色弹层内必须翻正（同 attrzone 修正） */
.editor-layer.ws[data-ed-demo] .ws .ed-cfg-pop .ed-ls[aria-pressed="true"] { background: var(--u6-paper, #eef4ef); border-color: var(--u6-pick-deep, #2e6b4f); color: var(--u6-pick-deep, #24503c); }
.editor-layer.ws[data-ed-demo] .ws .ed-cfg-pop .ed-ls[disabled] { opacity: .5; cursor: not-allowed; }
.editor-layer.ws[data-ed-demo] .ws .ed-cfg-pop .ed-pl-hint { color: var(--u6-ink-soft, #8a8d84); }
.editor-layer.ws[data-ed-demo] .ws .ed-cfg-pop .ed-cfg-caps { display: flex; flex-direction: column; gap: 3px; }
.editor-layer.ws[data-ed-demo] .ws .ed-cfg-pop .ed-cfg-caps p { margin: 0; font-size: 10px; color: var(--u6-ink, #55584f); line-height: 1.5; }
.editor-layer.ws[data-ed-demo] .ws .ed-cfg-pop .ed-cfg-no { color: var(--u6-flag, #a3483f); }
.editor-layer.ws[data-ed-demo] .ws .ed-cfg-pop .ed-cfg-note { color: var(--u6-ink-soft, #8a8d84); font-size: 10px; margin: 0; }
.editor-layer.ws[data-ed-demo] .ws .ed-cfg-pop .ed-cfg-ratio { display: flex; flex-wrap: wrap; gap: 6px; }
.editor-layer.ws[data-ed-demo] .ws .ed-cfg-pop .ed-cfg-ratio .ed-wf-field { flex-direction: row; align-items: center; gap: 4px; }
.editor-layer.ws[data-ed-demo] .ws .ed-cfg-pop .ed-cfg-ratio .ed-wf-field input[type="number"] { width: 74px; }
.editor-layer.ws[data-ed-demo] .ws .ed-cfg-pop .ed-wf-src { font-size: 9px; }
.editor-layer.ws[data-ed-demo] .ws .ed-cfg-pop .ed-wf-calljson { max-height: 110px; overflow: auto; font-size: 9px; }
/* 空白收敛：空状态行/空提示槽不再占高 */
.editor-layer.ws[data-ed-demo] .ws .ed-wf-rstat:empty { display: none; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tipslot:empty { display: none; }
/* ===== UC-B-R2（2026-09-14 执行结果 UX）：忙态不定进度条 + 主显示窗原图↔结果对比层 ===== */
/* 同步接口无真实进度回执 → 不定条（非定量、零百分比、零取消承诺）；reduced-motion 下停动画仍显条（在场=处理中语义不变） */
.editor-layer.ws[data-ed-demo] .ws .ed-wf-bar { display: inline-block; width: 56px; height: 4px; border-radius: 2px; margin-right: 8px; vertical-align: middle; background: linear-gradient(90deg, color-mix(in srgb, var(--u6-flag, #c9372c) 15%, transparent) 0%, var(--u6-flag, #c9372c) 50%, color-mix(in srgb, var(--u6-flag, #c9372c) 15%, transparent) 100%); background-size: 200% 100%; animation: ed-wf-indet 1.1s linear infinite; }
@keyframes ed-wf-indet { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }
@media (prefers-reduced-motion: reduce) { .editor-layer.ws[data-ed-demo] .ws .ed-wf-bar { animation: none; } }
/* 对比层=纯呈现叠加：几何由 syncResultCmp 跟随图像显示框；层体不吃手势，仅把手/关闭可交互 */
.editor-layer.ws[data-ed-demo] .ws .ed-resultcmp { position: absolute; z-index: 6; pointer-events: none; overflow: hidden; }
.editor-layer.ws[data-ed-demo] .ws .ed-resultcmp-img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: fill; display: block; pointer-events: none; user-select: none; -webkit-user-select: none; }
.editor-layer.ws[data-ed-demo] .ws .ed-resultcmp-handle { position: absolute; top: 0; bottom: 0; left: 50%; width: 22px; transform: translateX(-50%); pointer-events: auto; cursor: ew-resize; display: flex; align-items: center; justify-content: center; background: transparent; border: 0; padding: 0; }
.editor-layer.ws[data-ed-demo] .ws .ed-resultcmp-handle:focus-visible { outline: 2px solid #c9372c; outline-offset: -2px; border-radius: 4px; }
.editor-layer.ws[data-ed-demo] .ws .ed-resultcmp-line { position: absolute; top: 0; bottom: 0; left: 50%; width: 2px; margin-left: -1px; background: #fff; box-shadow: 0 0 0 1px rgba(0, 0, 0, .35); }
.editor-layer.ws[data-ed-demo] .ws .ed-resultcmp-knob { position: relative; width: 22px; height: 22px; border-radius: 50%; background: #fff; box-shadow: 0 1px 4px rgba(0, 0, 0, .35); }
.editor-layer.ws[data-ed-demo] .ws .ed-resultcmp-close { position: absolute; top: 6px; right: 6px; pointer-events: auto; width: 24px; height: 24px; border-radius: 50%; border: 0; background: rgba(20, 20, 20, .65); color: #fff; font-size: 15px; line-height: 1; cursor: pointer; }
.editor-layer.ws[data-ed-demo] .ws .ed-resultcmp-close:hover { background: rgba(20, 20, 20, .85); }
/* 条① 技能带紧凑：横排小卡（26px 图标+短名），Flux2 大卡下线后带内仅剩真实技能入口与同行小按钮；预设面板整行占位 */
.editor-layer.ws[data-ed-demo] .ws .ed-wf-card { flex-direction: row; justify-content: flex-start; align-items: center; gap: 5px; padding: 4px 7px; border-radius: 8px; text-align: left; min-height: 32px; box-sizing: border-box; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-icon { width: 26px; height: 26px; border-radius: 8px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-icon svg { width: 16px; height: 16px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-icon-abbr { font-size: 11px; border-radius: 8px; letter-spacing: 0; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-icon-flux { border-radius: 8px; font-size: 8px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-cardname { font-size: 9.5px; flex: 0 1 auto; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-status { position: static; box-shadow: none; margin-left: 2px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-card .ed-chev { position: static; margin-left: auto; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-card-add { flex: 0 0 auto; width: auto; min-height: 0; border: 1px dashed var(--u6-line, #cfccc0); color: var(--u6-ink-soft, #6d7168); padding: 3px 9px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-card-add .ed-wf-cardname { font-weight: 600; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-plus { font-style: normal; font-size: 12px; line-height: 1; color: var(--u6-ink-soft, #8a8d84); }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-preset { grid-column: 1 / -1; }
/* 条② 技能区短状态徽章：未连接/已连接/未登录（长解释=技能能力菜单，非常驻） */
.editor-layer.ws[data-ed-demo] .ws .ed-wf-conn { font-style: normal; margin-left: 6px; font-size: 8.5px; color: var(--u6-gold, #8a5a12); background: color-mix(in srgb, var(--u6-gold, #c9781e) 14%, transparent); border-radius: 4px; padding: 1px 5px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-conn[data-ed-conn="已连接"] { color: var(--u6-pick-deep, #24503c); background: color-mix(in srgb, var(--u6-pick, #2e7d5b) 16%, transparent); }

/* ===== M-CREATE-VIEW-R1（2026-09-10）：独立效果图创作视角——覆盖层/左上局部补丁/右侧紧凑 Agent/图片堆投影 ===== */
/* 视角=同一份资产/任务记录的另一种投影：层内自有相机；不加通栏页眉（派工红线），补丁只包内容宽 */
.create-layer { position: fixed; inset: 0; z-index: 130; background: rgba(18, 21, 16, .94); }
.create-pathpatch { position: absolute; top: 14px; left: 16px; z-index: 3; display: flex; align-items: center; gap: 7px; max-width: 640px; width: fit-content; padding: 6px 10px; border-radius: 9px; background: var(--u6-paper, #f5f4ee); box-shadow: 0 2px 10px rgba(0, 0, 0, .35); font-size: 11px; }
.create-pathpatch .cpp-crumb { color: var(--u6-ink-soft, #6d7168); white-space: nowrap; }
.create-pathpatch .cpp-sep { color: var(--u6-ink-mute, #b2b2ac); font-size: 9px; }
.create-pathpatch .cpp-name { font-weight: 620; color: var(--u6-ink, #20211f); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.create-pathpatch .cpp-rename { width: 110px; font-size: 10.5px; border: 1px solid rgba(0, 0, 0, .18); border-radius: 5px; padding: 2px 5px; background: var(--surface); color: var(--u6-ink, #20211f); }
.create-exit { position: absolute; top: 52px; left: 16px; z-index: 3; border: 1px solid rgba(255, 255, 255, .3); border-radius: 8px; background: rgba(23, 27, 22, .85); color: #e8e6dd; font-size: 11px; padding: 5px 10px; cursor: pointer; }
.create-exit:hover { border-color: var(--u6-gold, #efce6e); color: var(--u6-gold, #efce6e); }
.create-stage { position: absolute; inset: 0; overflow: hidden; }
.create-world { position: absolute; left: 0; top: 0; width: 1600px; height: 900px; transform-origin: 0 0; }
.create-edges { position: absolute; inset: 0; width: 1600px; height: 900px; pointer-events: none; overflow: visible; }
.create-edges path { fill: none; stroke: var(--u6-ink-soft, #8a8f84); stroke-width: 2; }
.create-edges path.derived { stroke: var(--u6-gold, #efce6e); stroke-dasharray: 7 5; }
.v-card { position: absolute; background: var(--u6-dark, #171b16); border: 1px solid rgba(255, 255, 255, .18); border-radius: 9px; padding: 6px; box-shadow: 0 6px 22px rgba(0, 0, 0, .45); cursor: grab; } /* M-R2（裁③）：卡面可拖动=移卡；拖拽中 grabbing */
.v-card.dragging { cursor: grabbing; }
.v-card img { width: calc(100% - 0px); height: calc(100% - 26px); object-fit: cover; border-radius: 5px; display: block; }
.v-card .v-title { font-size: 10px; color: #cfd3cb; margin-top: 4px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.v-card .v-branch { position: absolute; right: 6px; top: 6px; font-size: 9px; line-height: 1; padding: 3px 6px; border-radius: 6px; border: 1px solid rgba(255, 255, 255, .22); background: rgba(23, 27, 22, .8); color: #cfd3cb; cursor: pointer; } /* 常驻可点（曾 opacity 门控致自动化/触控命中不稳，改常显） */
.v-card.focus { border-color: var(--u6-gold, #efce6e); box-shadow: 0 0 0 2px rgba(239, 206, 110, .35), 0 6px 22px rgba(0, 0, 0, .45); }
.create-missing { position: absolute; z-index: 2; width: 340px; padding: 12px 14px; border: 1px dashed color-mix(in srgb, var(--u6-flag, #c9372c) 70%, transparent); border-radius: 10px; background: rgba(46, 22, 20, .9); color: var(--u6-flag, #e8a49e); font-size: 11px; line-height: 1.6; }
.create-agent { position: fixed; top: 64px; right: 24px; width: 360px; z-index: 4; background: var(--u6-paper, #ecebe4); border-radius: 12px; padding: 12px 14px; display: flex; flex-direction: column; gap: 8px; box-shadow: 0 10px 34px rgba(0, 0, 0, .5); }
.create-agent .ca-title { font-size: 12px; font-weight: 680; color: var(--u6-ink, #20211f); display: flex; flex-direction: column; gap: 2px; }
.create-agent .ca-note { font-weight: 400; font-size: 10px; color: var(--u6-ink-soft, #6d7168); }
.create-agent textarea { width: 100%; resize: vertical; border: 1px solid rgba(0, 0, 0, .16); border-radius: 7px; background: var(--surface); color: var(--u6-ink, #20211f); font-size: 11px; padding: 6px 8px; box-sizing: border-box; }
.create-agent .ca-row { font-size: 10.5px; color: var(--u6-ink, #43463f); display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.create-agent .ca-row select, .create-agent .ca-row button { border: 1px solid rgba(0, 0, 0, .2); border-radius: 6px; background: var(--surface); font-size: 10.5px; padding: 2px 7px; cursor: pointer; }
.create-agent .ca-ref span { background: var(--u6-gold, #efce6e); color: var(--u6-ink, #2c3026); border-radius: 6px; padding: 2px 7px; font-size: 10px; }
.create-agent .ca-ref-none { color: var(--u6-ink-soft, #9aa197); font-style: italic; }
.create-agent .ca-run { border: 1px dashed rgba(0, 0, 0, .25); border-radius: 8px; background: transparent; color: var(--u6-ink-soft, #9aa197); font-size: 12px; padding: 7px 0; cursor: not-allowed; }
.create-agent .ca-run:not([disabled]) { border-style: solid; border-color: var(--u6-pick-deep, #2e6b4f); background: var(--u6-pick-deep, #2e6b4f); color: #fff; cursor: pointer; }
.create-agent .ca-run:not([disabled]):hover { background: var(--u6-pick-deep, #275c44); }
.create-agent .ca-stat { font-size: 10px; line-height: 1.55; color: var(--u6-ink-soft, #6d7168); white-space: pre-wrap; overflow-wrap: anywhere; min-height: 14px; }
.create-refmenu { position: absolute; left: 14px; bottom: 96px; z-index: 5; max-height: 220px; overflow: auto; background: var(--surface); border: 1px solid rgba(0, 0, 0, .16); border-radius: 9px; box-shadow: 0 8px 26px rgba(0, 0, 0, .25); padding: 4px; }
.create-refmenu button { display: block; width: 100%; text-align: left; border: 0; background: transparent; border-radius: 6px; font-size: 11px; padding: 6px 9px; cursor: pointer; color: var(--u6-ink, #20211f); }
.create-refmenu button:hover { background: color-mix(in srgb, var(--u6-gold, #efce6e) 20%, transparent); }
/* 主画布「图片堆」投影节点：front=封面卡 src 引用投影（零成员复制，与 group 深拷贝形态区分） */
.create-stack { position: absolute; z-index: 5; width: 190px; height: 152px; border-radius: 10px; background: var(--u6-paper, #f5f4ee); border: 1px solid rgba(0, 0, 0, .14); box-shadow: 0 8px 22px rgba(0, 0, 0, .22); cursor: pointer; }
.create-stack .create-stack-lift { position: absolute; inset: 6px -5px -6px 5px; border-radius: 10px; background: rgba(0, 0, 0, .07); z-index: -1; }
.create-stack img.stack-front, .create-stack .stack-front-ph { position: absolute; left: 8px; top: 8px; right: 8px; bottom: 30px; width: calc(100% - 16px); height: calc(100% - 38px); object-fit: cover; border-radius: 6px; }
.create-stack .stack-front-ph { display: flex; align-items: center; justify-content: center; background: var(--u6-paper, #ddd9cf); color: var(--u6-ink-soft, #9aa197); font-size: 20px; }
.create-stack .stack-count { position: absolute; right: 8px; top: 8px; background: var(--u6-dark, #20211f); color: var(--u6-gold, #efce6e); border-radius: 999px; font-size: 10px; padding: 2px 7px; }
/* UC-B-R1：原图卡下方「视角」入口（依附原图，非浮控卡）；stack-enter/covers/cover-menu 三键已随投影化移除，不留不可达样式 */
/* CREATION-R6-D（2026-09-23 用户补充）：视角按钮统一浮于图片卡右上角「图片内留边」，不再占卡片下方（原 top:100% 底外挂位取消，
   也不新增底部黑条）；显示条件与功能零改动（仅带视角内容卡渲染，main.js :2167/:2179 原式）。避让=常规卡在 48px 卡头（含右上 •••）
   之下 8px、无卡头的导入对象直接角内 8px；连接点在各边中点、角落天然避让；absolute 于 article 内 → 缩放画布随卡定位不变；
   拖卡/框选已在 pointerdown 排除 button 目标（main.js :9399 closest('button,...') 早退），点击只走 viewEntry。hover 沿用既有金调 token。 */
.canvas-card .card-view-btn { position: absolute; top: 56px; right: 10px; border: 1px solid rgba(0, 0, 0, .18); border-radius: 6px; background: var(--surface); font-size: 10px; padding: 2px 8px; cursor: pointer; z-index: 3; }
.canvas-card.imported-canvas-object .card-view-btn { top: 8px; right: 8px; }
.canvas-card .card-view-btn:hover { background: color-mix(in srgb, var(--u6-gold, #efce6e) 20%, transparent); }

/* N0-10 待恢复结果入口：紧凑悬浮 dock（图片堆）/面板内嵌（视角、编辑器）——同一组件三挂载 */
.pending-recover { position: absolute; right: 18px; top: 76px; z-index: 26; min-width: 168px; max-width: 380px; background: #fffdf6f2; border: 1px solid #20211f26; border-radius: 10px; box-shadow: 0 6px 22px #20211f1a; font-size: 11.5px; }
.pending-recover .pr-toggle { display: flex; align-items: center; gap: 6px; width: 100%; border: 0; background: transparent; border-radius: 10px; padding: 7px 10px; cursor: pointer; font-size: 11.5px; color: var(--u6-ink, #20211f); font-weight: 600; }
.pending-recover .pr-toggle:hover { background: color-mix(in srgb, var(--u6-gold, #efce6e) 16.86%, transparent); }
.pending-recover .pr-toggle svg { width: 14px; height: 14px; }
.pending-recover .pr-panel { padding: 2px 10px 8px; max-height: 46vh; overflow: auto; }
.pending-recover .pr-panel[hidden] { display: none; }
.pending-recover .pr-row { border-top: 1px dashed #20211f1f; padding: 6px 0 7px; display: grid; gap: 4px; }
.pending-recover .pr-meta { color: var(--u6-ink, #20211f); font-weight: 550; word-break: break-all; }
.pending-recover .pr-reason { color: var(--u6-flag, #a4562c); }
.pending-recover .pr-reason:empty { display: none; }
.pending-recover .pr-act { display: flex; gap: 8px; }
.pending-recover .pr-act button { border: 1px solid #20211f33; background: var(--surface); border-radius: 7px; padding: 3px 9px; font-size: 11px; cursor: pointer; color: var(--u6-ink, #20211f); }
.pending-recover .pr-act button:hover:not(:disabled) { background: color-mix(in srgb, var(--u6-gold, #efce6e) 23.92%, transparent); }
.pending-recover .pr-act button:disabled { opacity: .45; cursor: not-allowed; }
.pending-recover .pr-empty { color: #20211f8c; padding: 4px 0 2px; }
/* RELIGHT-NATIVE-ADOPTION（本票）：编辑器挂载此前与 -view 一起被压成「内嵌」形（position:static ⇒ 上方 z-index:26
   失效），而同一 section 内 .ws-canvas 是 position:absolute; inset:12px ⇒ 静态流里的 dock 恒被画布覆盖：
   实测 elementFromPoint(dock 中心)=div.ws-canvas，真实指针永远打不到 [data-recover-apply]。本行只把 -editor
   从该覆写中摘出，回到本文件既有的通用悬浮形（absolute / right:18 / top:76 / z-index:26）——不是新增入口，
   是让已交付的既有按钮重新可点。-view 的内嵌形原样保留。 */
.pending-recover.pending-recover-view { position: static; max-width: none; box-shadow: none; background: transparent; border: 0; margin-top: 8px; }
.pending-recover.pending-recover-view .pr-toggle { padding: 4px 2px; }
.pending-recover.pending-recover-view .pr-panel { padding: 0 2px 4px; }

/* ================= N0-11-R6（2026-09-13 用户双图定稿 + 补充①侧栏适度加宽 + 补充②V1.0 隐藏式提交钮）EOF 后段覆盖 =================
   条A 首屏=工作流图标选择列表（悬停/键盘聚焦→tipslot 真实名称+简介，缺字段省略不编造）；条B 详情头=①图标左②名称右上③简介右下（≤120px，无巨型卡）；
   条C 分类严格单行（两行合同作废）：页签 nowrap+10px 不缩到不可读，宽度不足=整行折叠为同行下拉（display:none 藏尾禁止，兜底由 fitCatRow rAF 复判）；
   条E/F 工具选项/工作流设置严格单行（复杂项已在上拉菜单，禁第二行；pop 出界不被裁切 ⇒ 不用 overflow:hidden 藏尾）；
   条G ⑧分隔线⑨成组⑩其他工作流入口为 DOM 级（无本段样式）；条I 发送钮逐字对齐 V1.0 CardComposer.vue:211-214（18×18 right:4 bottom:5 透明底 radius5 #999 hover B8860B disabled .3 纸飞机 stroke2）：
   默认不常驻=opacity:0+pointer-events:none（非 display:none，键盘 Tab/程序 focus 可达），hover/focus-within/focus 显现，隐藏态命中穿透零悬空热区。 */
/* 补充①：宽屏适度加宽 340→400（H1 340–430、H2 1440 画布 ≥700 实测）；≤1000 窄窗沿用原 340——单行不足由分类下拉兜底，不缩字、不整页横溢 */
.editor-layer.ws[data-ed-demo] .ws .ed-rail { width: 400px; }
@media (max-width: 1000px) { .editor-layer.ws[data-ed-demo] .ws .ed-rail { width: 340px; } }
/* ---- 条A：选择列表视图 ---- */
.editor-layer.ws[data-ed-demo] .ws .ed-wf-listbody { flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column; gap: 8px; overflow-y: auto; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-iconlist { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; flex: 0 0 auto; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-iconcard { display: flex; flex-direction: column; align-items: center; justify-content: flex-start; gap: 5px; min-width: 0; padding: 9px 4px 7px; border: 1px solid var(--u6-line, #dedcd3); border-radius: 9px; background: var(--u6-paper, #faf8f2); color: var(--u6-ink, #3a3d38); font: inherit; cursor: pointer; text-align: center; transition: border-color .15s ease, box-shadow .15s ease; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-iconcard:hover { border-color: var(--u6-gold, #b8860b); box-shadow: var(--sh-rest); }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-iconcard:focus-visible { outline: none; border-color: var(--u6-gold, #b8860b); box-shadow: 0 0 0 2px rgba(184, 134, 11, .28); }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-ic { display: flex; align-items: center; justify-content: center; width: 32px; height: 32px; flex: 0 0 auto; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-ic svg { width: 20px; height: 20px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-iconcard .ed-wf-icon-flux { border-radius: 8px; font-size: 7.5px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-iconcard .ed-wf-icon-abbr { border-radius: 8px; font-size: 11px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-iconcard .ed-wf-icon-plus { font-size: 22px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-icname { font-size: 10px; line-height: 1.25; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--u6-ink, #55584f); }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-listbody .ed-wf-tipslot { flex: 0 0 auto; min-height: 2.9em; box-sizing: border-box; background: var(--u6-paper, #efece1); border: 1px solid var(--u6-line, #dedcd3); border-radius: 8px; padding: 5px 7px; font-size: 10px; line-height: 1.45; color: var(--u6-ink, #55584f); } /* 列表视图提示槽恢复面板盒样式（4622 底部段版本不适用于首屏） */
/* ---- 条B：详情紧凑头（返回 → ①图标左 ②名称右上 ③简介右下） ---- */
.editor-layer.ws[data-ed-demo] .ws .ed-wf-back { align-self: flex-start; display: inline-flex; align-items: center; gap: 4px; border: none; background: none; font: inherit; font-size: 10.5px; color: var(--u6-ink-soft, #6d7168); cursor: pointer; padding: 2px 6px; border-radius: 5px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-back:hover, .editor-layer.ws[data-ed-demo] .ws .ed-wf-back:focus-visible { color: var(--u6-gold, #b8860b); background: var(--u6-paper, #f2ede0); outline: none; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-dhead { display: flex; align-items: flex-start; gap: 10px; max-height: 118px; overflow: hidden; border: 1px solid var(--u6-line, #dedcd3); border-radius: 9px; background: var(--u6-paper, #faf8f2); padding: 8px 10px; box-sizing: border-box; flex: 0 0 auto; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-dicon { flex: 0 0 36px; width: 36px; height: 36px; display: flex; align-items: center; justify-content: center; overflow: hidden; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-dicon svg { width: 22px; height: 22px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-dicon .ed-wf-icon-abbr { border-radius: 8px; font-size: 12px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-dicon .ed-wf-icon-flux { border-radius: 8px; font-size: 8px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-dmeta { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; align-items: flex-start; gap: 2px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-dname { font-size: 12.5px; font-weight: 620; color: var(--u6-ink, #20211f); display: flex; align-items: center; gap: 6px; flex-wrap: wrap; min-width: 0; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-ddesc { font-size: 10px; line-height: 1.4; color: var(--u6-ink-soft, #6d7168); overflow-wrap: anywhere; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-deldf { position: static; flex: 0 0 auto; border: none; background: none; color: var(--u6-ink-soft, #9a9d94); cursor: pointer; padding: 2px 4px; border-radius: 5px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-deldf:hover, .editor-layer.ws[data-ed-demo] .ws .ed-wf-deldf:focus-visible { color: var(--u6-flag, #c9372c); background: var(--u6-paper, #f6ece9); outline: none; }
/* ---- 条C：分类严格单行 + 同行下拉兜底（folded 由 fitCatRow rAF 复判写入；未折叠态 chips 在场可测，禁藏尾） ---- */
.editor-layer.ws[data-ed-demo] .ws .ed-wf-chips { flex-wrap: nowrap; overflow: hidden; min-width: 0; gap: 2px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-catrow.folded .ed-wf-chips { display: none; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-chip { padding: 2px 5px 3px; font-size: 10px; gap: 2px; } /* C4：≥10px 硬底线，禁缩到不可读；溢出改下拉非小字 */
.editor-layer.ws[data-ed-demo] .ws .ed-wf-chip svg { width: 11px; height: 11px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-catsel { display: none; font: inherit; font-size: 10px; color: var(--u6-ink, #3a3d38); background: var(--surface, #fffdf9); border: 1px solid var(--u6-line, #dedcd3); border-radius: 6px; padding: 3px 5px; max-width: 100%; box-sizing: border-box; align-self: flex-start; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-catrow.folded .ed-wf-catsel:not([hidden]) { display: block; align-self: stretch; }
/* ---- 条E/F：工具选项与设置行严格单行（禁 wrap；不用 overflow:hidden——上拉菜单出界不得被裁；复杂项已进上拉） ---- */
.editor-layer.ws[data-ed-demo] .ws .ed-toolopts { flex-wrap: nowrap; }
.editor-layer.ws[data-ed-demo] .ws .ed-toolopts .ed-topt { flex: 0 1 auto; min-width: 0; }
.editor-layer.ws[data-ed-demo] .ws .ed-toolopts .ed-topt .ed-topt-v { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
.editor-layer.ws[data-ed-demo] .ws .ed-toolopts .ed-topt > span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
/* ---- EB-P0 A3（COMPOSER-SEND-P0③）：唯一提交钮=右侧常显侧栏（覆盖旧隐藏式）——不依赖 hover/focus 即可发现；
   v1.0 纸飞机图标 12×12 沿用；命中区宽 44px、高随正文行（min-height 36）；disabled=可见暗淡非隐藏；
   旧「显现=hover/focus-within/自身获焦」整链撤除（E5 断言恒 opacity:1 可见）。左向弹层（ed-topt）位置与钮无耦合。 ---- */
.editor-layer.ws[data-ed-demo] .ws .ed-c-send,
.editor-layer.ws[data-ed-demo] .ws .ed-c-send.ed-wf-run { position: static; flex: 0 0 44px; width: 44px; min-width: 44px; align-self: stretch; min-height: 36px; display: flex; align-items: center; justify-content: center; gap: 0; padding: 0; border: 1px solid var(--u6-line, #cfccc0); border-radius: 9px; background: var(--u6-paper, #fbfaf5); color: var(--u6-ink, #55584f); font-size: inherit; cursor: pointer; opacity: 1; pointer-events: auto; transition: color .15s ease; } /* 常显基态=opacity:1+pointer-events:auto；色彩承 V1 .15s transition 沿旧 */
.editor-layer.ws[data-ed-demo] .ws .ed-c-send svg { width: 12px; height: 12px; stroke-width: 2; display: block; } /* V1 纸飞机 12×12 stroke2；svg() 帮助器 1.8 由本行覆盖（零改） */
.editor-layer.ws[data-ed-demo] .ws .ed-c-send[disabled] { opacity: .3; } /* 不可用态：可见但暗淡（V1 .3 语义保留，非隐藏）——待发送/发送中/不可用三态恒可判读 */
.editor-layer.ws[data-ed-demo] .ws .ed-c-send:hover:not([disabled]),
.editor-layer.ws[data-ed-demo] .ws .ed-c-send.ed-wf-run:not([disabled]):hover { color: var(--u6-gold, #b8860b); } /* 悬停金=V1 hover；绿底/绿字整链中性化沿旧 */

/* FOOTER-P0 ①（2026-09-15 用户截图裁决）：唯一发送钮停靠最右动作列（宿主 [data-ed-c-sendslot]，同列同中心线）。
   ED-A⑤（09-16 派工单第5条）：去独立外框/胶囊底——border:0 + 透明底 + 图标色入 .ws-ctrl 同体系（#3a3d38），
   尺寸/描边/hover/focus 与全屏、返回两钮同规格（32×32、radius 8、hover rgba(28,38,33,.10)、focus 同款 outline）；
   纸飞机图标放大至 16 与另两钮图标同尺寸；hover 与另两钮逐字同（仅底 rgba(28,38,33,.10)，去金色特异=「同体系」从严解释）；
   可访问名称、禁用/运行诚实态（opacity .3）全保留；上块 44px 侧栏几何在钮未入列（槽缺失 fail-safe 留正文行）时逐字沿用。 */
.editor-layer.ws[data-ed-demo] .ws .ws-controls-demo .ws-ctrl-sendslot { display: flex; align-items: center; justify-content: center; width: 32px; flex: 0 0 auto; }
.editor-layer.ws[data-ed-demo] .ws .ws-controls-demo .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); font-size: inherit; cursor: pointer; opacity: 1; pointer-events: auto; transition: color .15s ease; }
.editor-layer.ws[data-ed-demo] .ws .ws-controls-demo .ed-c-send svg { width: 16px; height: 16px; }
.editor-layer.ws[data-ed-demo] .ws .ws-controls-demo .ed-c-send:hover:not([disabled]) { color: var(--u6-ink, #3a3d38); background: rgba(28, 38, 33, .10); }
.editor-layer.ws[data-ed-demo] .ws .ws-controls-demo .ed-c-send[disabled] { opacity: .3; cursor: not-allowed; background: transparent; }
.editor-layer.ws[data-ed-demo] .ws .ws-controls-demo .ed-c-send:focus-visible { outline: 2px solid var(--u6-line, #456052); outline-offset: -2px; }

/* User-marked workflow detail: one header, borderless guide, aligned controls. */
.editor-layer.ws[data-ed-demo] .ws .ed-wf-title { border: 0; padding: 0; background: none; color: inherit; font: inherit; font-weight: 650; cursor: pointer; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-title:focus-visible { outline: 2px solid var(--accent, #b8860b); outline-offset: 3px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-dhead { border: 0; border-radius: 0; background: none; padding: 6px 0; max-height: none; align-items: center; gap: 9px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-dicon { width: 32px; height: 32px; flex-basis: 32px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-dicon svg { width: 20px; height: 20px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-dicon .ed-wf-icon-flux { font-size: 7.5px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-dname { width: 100%; flex-wrap: nowrap; font-size: 12px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-dname > span { min-width: 0; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-dname small { color: var(--u6-ink-soft, #777970); font-size: 10px; font-weight: 400; flex-shrink: 0; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-ddesc { display: flex; align-items: center; gap: 5px; width: 100%; min-width: 0; padding: 0; border: 0; border-radius: 0; background: none; text-align: left; cursor: pointer; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-ddesc > span { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-ddesc svg { margin-left: auto; flex-shrink: 0; transition: transform 220ms ease; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-ddesc[aria-expanded=true] svg { transform: rotate(180deg); }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-ddesc:focus-visible { outline: 2px solid var(--accent, #b8860b); outline-offset: 2px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-guide { display: grid; grid-template-rows: 0fr; flex: 0 0 auto; opacity: 0; transition: grid-template-rows 220ms ease, opacity 220ms ease; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-guide.open { grid-template-rows: 1fr; opacity: 1; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-guide > div { min-height: 0; overflow: hidden; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-guide p { margin: 0; padding: 0 0 8px 41px; font-size: 11px; line-height: 1.6; color: var(--u6-ink-soft, #6d7168); }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tile { position: relative; border-radius: 4px; transition: border-color 150ms ease, box-shadow 150ms ease; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tile img { border-radius: 2px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tile:hover { border-color: var(--accent, #b8860b); }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tile.on { border-color: var(--accent, #b8860b); box-shadow: inset 4px 0 0 var(--accent, #b8860b); background: color-mix(in srgb, var(--accent, #b8860b) 8%, var(--u6-paper, #faf8f2)); }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tile:focus-visible { outline: 2px solid var(--accent, #b8860b); outline-offset: -2px; }
.editor-layer.ws[data-ed-demo] .ws .ed-toolopts,
.editor-layer.ws[data-ed-demo] .ws .ed-c-cfgrow { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 4px; width: 100%; padding: 0; box-sizing: border-box; }
.editor-layer.ws[data-ed-demo] .ws .ed-toolopts > .ed-topt,
.editor-layer.ws[data-ed-demo] .ws .ed-c-cfgrow > .ed-topt { width: 100%; height: 26px; min-width: 0; border-radius: 4px; justify-content: center; padding: 3px 4px; font-size: 10px; }
.editor-layer.ws[data-ed-demo] .ws .ed-toolopts > .ed-topt > span:first-of-type { display: none; }
.editor-layer.ws[data-ed-demo] .ws .ed-toolopts > .ed-topt-act { white-space: nowrap; }
.editor-layer.ws[data-ed-demo] .ws .ed-topt[data-ed-topt="cfg-adv"] svg { transition: transform 220ms ease; }
.editor-layer.ws[data-ed-demo] .ws .ed-topt[data-ed-topt="cfg-adv"][aria-expanded=true] svg { transform: rotate(180deg); }
.editor-layer.ws[data-ed-demo] .ws .ed-topt-pop { border-radius: 5px; }
.editor-layer.ws[data-ed-demo] .ws .ed-topt-pop .ed-topt-row { flex-direction: column; flex-wrap: nowrap; align-items: stretch; }
.editor-layer.ws[data-ed-demo] .ws .ed-topt-pop .ed-topt-row .ed-color { display: flex; align-items: center; gap: 8px; width: 100%; min-height: 25px; border-radius: 3px; background: transparent; box-shadow: none; padding: 3px 5px; border: 1px solid transparent; }
.editor-layer.ws[data-ed-demo] .ws .ed-topt-pop .ed-color::before { content: ''; width: 14px; height: 14px; flex-shrink: 0; border-radius: 3px; background: var(--sw); border: 1px solid #8885; }
.editor-layer.ws[data-ed-demo] .ws .ed-topt-pop .ed-color::after { content: attr(data-ed-color); color: var(--u6-ink, #55584f); font-size: 10px; }
.editor-layer.ws[data-ed-demo] .ws .ed-topt-pop .ed-color-custom::after { content: '自定义颜色'; }
.editor-layer.ws[data-ed-demo] .ws .ed-topt-pop .ed-color.on { border-color: var(--accent, #b8860b); }
.editor-layer.ws[data-ed-demo] .ws .ed-topt-pop .ed-ls { width: 100%; text-align: left; }
.editor-layer.ws[data-ed-demo] .ws .ed-cfg > .ed-c-status { display: block; font-size: 10px; color: var(--u6-ink-soft, #777970); }
.editor-layer.ws[data-ed-demo] .ws .ed-cfg > .ed-c-status:empty { display: none; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tplcur:empty { display: none; }
.editor-layer.ws[data-ed-demo] .ws .ed-personal-add { min-height: 80px; display: flex; align-items: center; justify-content: center; color: var(--u6-ink-soft, #92948d); border-style: dashed; background: transparent; }
.editor-layer.ws[data-ed-demo] .ws .ed-personal-cover { min-height: 70px; display: flex; align-items: center; justify-content: center; color: var(--accent, #b8860b); background: var(--u6-paper, #eeece4); }
.editor-layer.ws[data-ed-demo] .ws .ed-personal-form { grid-column: 1 / -1; display: grid; grid-template-columns: minmax(0,1fr) 90px 26px 26px; gap: 4px; padding: 4px 0; }
.editor-layer.ws[data-ed-demo] .ws .ed-personal-form input,
.editor-layer.ws[data-ed-demo] .ws .ed-personal-form select,
.editor-layer.ws[data-ed-demo] .ws .ed-personal-form button { min-width: 0; width: 100%; box-sizing: border-box; height: 28px; border: 1px solid var(--u6-line, #dedcd3); border-radius: 4px; background: var(--u6-paper, #faf8f2); color: var(--u6-ink, #55584f); font: inherit; font-size: 11px; }
.editor-layer.ws[data-ed-demo] .ws .ed-personal-form button { cursor: pointer; }
@media (prefers-reduced-motion: reduce) {
  .editor-layer.ws[data-ed-demo] .ws .ed-wf-guide,
  .editor-layer.ws[data-ed-demo] .ws .ed-wf-ddesc svg,
  .editor-layer.ws[data-ed-demo] .ws .ed-topt svg { transition: none; }
}

/* R2: compact selectors, four app icons, narrow upward tool menus. */
.editor-layer.ws[data-ed-demo] .ws .ed-wf-iconlist { grid-template-columns:repeat(4,minmax(0,1fr));gap:6px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-iconcard { border-radius:4px;padding:10px 2px 8px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-ic,
.editor-layer.ws[data-ed-demo] .ws .ed-wf-dicon { width:48px;height:48px;flex-basis:48px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-ic svg,
.editor-layer.ws[data-ed-demo] .ws .ed-wf-dicon svg { width:28px;height:28px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-iconcard .ed-wf-icon-flux,
.editor-layer.ws[data-ed-demo] .ws .ed-wf-dicon .ed-wf-icon-flux { font-size:10px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-chips { border-bottom:0;padding-bottom:3px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-chip,
.editor-layer.ws[data-ed-demo] .ws .ed-wf-chip.on { position:relative;border:0;border-radius:2px;box-shadow:none;background:transparent;margin:0;padding:5px 5px 8px;color:inherit; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-chip.on::after { content:'';position:absolute;bottom:0;left:calc(50% - 11px);width:22px;height:4px;background:var(--accent,#b8860b);border-radius:1px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-chip:hover { background:#e7e4d980; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-chip:focus-visible { outline:1px dotted var(--accent,#b8860b);outline-offset:-1px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tile:hover { background:color-mix(in srgb,var(--accent,#b8860b) 12%,var(--u6-paper, #faf8f2));box-shadow:0 2px 6px #20211f25;border-color:var(--accent,#b8860b); }
.editor-layer.ws[data-ed-demo] .ws .ed-topt[data-ed-topt="cfg-adv"] svg { transform:rotate(180deg); }
.editor-layer.ws[data-ed-demo] .ws .ed-topt[data-ed-topt="cfg-adv"][aria-expanded=true] svg { transform:rotate(0deg); }
.editor-layer.ws[data-ed-demo] .ws .ed-topt-pop .ed-pl-hint { display:none; }
.editor-layer.ws[data-ed-demo] .ws .ed-topt-pop[data-ed-topt-pop="color"] { padding:5px;scrollbar-width:thin; }
.editor-layer.ws[data-ed-demo] .ws .ed-topt-pop[data-ed-topt-pop="color"] .ed-topt-row { gap:4px; }
.editor-layer.ws[data-ed-demo] .ws .ed-topt-pop .ed-color { padding:2px;justify-content:center;min-height:24px; }
.editor-layer.ws[data-ed-demo] .ws .ed-topt-pop .ed-color::before { width:20px;height:20px;border-radius:2px; }
.editor-layer.ws[data-ed-demo] .ws .ed-topt-pop .ed-color::after,
.editor-layer.ws[data-ed-demo] .ws .ed-topt-pop .ed-color-custom::after { content:none; }
.editor-layer.ws[data-ed-demo] .ws .ed-topt-pop .ed-color-custom { width:100%;height:24px;min-height:24px; }
.editor-layer.ws[data-ed-demo] .ws .ed-topt-pop .ed-color-custom input { width:22px;height:22px; }
.ed-template-dialog { width:min(480px,calc(100vw - 32px));max-height:calc(100dvh - 32px);padding:20px;box-sizing:border-box;overflow:auto;border:1px solid var(--u6-line, #dedcd3);border-radius:8px;background:var(--u6-paper, #faf8f2);color:var(--u6-ink, #30342e);box-shadow:0 18px 80px #0003;font:13px/1.5 system-ui,sans-serif; }
.ed-template-dialog::backdrop { background:#20211f66; }
.ed-template-dialog form { display:grid;gap:12px; }
.ed-template-dialog header,.ed-template-dialog footer { display:flex;align-items:center;justify-content:space-between;gap:10px; }
.ed-template-dialog header strong { font-size:16px; }
.ed-template-dialog header button { border:0;background:transparent;font-size:22px; }
.ed-template-dialog p { margin:0;font-size:12px;color:var(--u6-ink-soft, #777970); }
.ed-template-dialog label { display:grid;gap:4px;min-width:0; }
.ed-template-dialog .ed-template-fields { display:grid;grid-template-columns:1fr 1fr;gap:12px; }
.ed-template-dialog input:not([type=radio]),.ed-template-dialog select,.ed-template-dialog textarea { width:100%;box-sizing:border-box;min-width:0;border:1px solid var(--u6-line, #d7d4c9);border-radius:4px;background:var(--surface, #fffdf9);color:inherit;padding:7px 8px;font:inherit; }
.ed-template-dialog textarea { resize:vertical;min-height:100px; }
.ed-template-dialog small { color:var(--u6-ink-soft, #8a8c84);font-size:11px; }
.ed-template-dialog img { width:100%;max-height:140px;object-fit:contain;background:var(--u6-paper, #eae8df); }
.ed-template-dialog fieldset { border:0;padding:0;display:flex;gap:20px;margin:0; }
.ed-template-dialog legend { margin-bottom:4px; }
.ed-template-dialog fieldset label { display:flex;align-items:center;gap:4px; }
.ed-template-dialog footer { justify-content:flex-end; }
.ed-template-dialog button { cursor:pointer;border:1px solid var(--u6-line, #d7d4c9);border-radius:4px;background:transparent;color:inherit;padding:6px 12px;font:inherit; }
.ed-template-dialog [data-wf-personal-save] { background:var(--accent,#b8860b);border-color:transparent;color:#fff; }
.ed-template-dialog [role=alert] { color:var(--u6-flag, #b33629); }
.ed-template-dialog :focus-visible { outline:2px solid var(--accent,#b8860b);outline-offset:2px; }
.ed-template-dialog :disabled { cursor:not-allowed;opacity:.5; }

.ed-image-tools { width:min(660px,calc(100vw - 32px)); }
.ed-image-tools [data-it-sources] { display:flex;flex-direction:column;max-height:140px;overflow:auto;gap:5px; }
.ed-image-tools [data-it-sources] label { display:flex;flex-direction:row;gap:8px;align-items:center; }
.ed-image-tools [data-it-sources] input { width:auto; }
.ed-image-results { display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px; }
.ed-image-results figure { margin:0;min-width:0;padding:6px;border:1px solid var(--u6-line, #ddd);border-radius:4px; }
.ed-image-results img { width:100%;height:110px;object-fit:contain;background:repeating-conic-gradient(var(--u6-paper, #eee) 0% 25%,var(--surface) 0% 50%) 50%/12px 12px; }
.ed-image-results figcaption,.ed-image-results a { font-size:11px; }
.ed-image-tools footer [role=status] { flex:1;font-size:11px; }
.editor-layer.ws[data-ed-demo] .ws .ed-references { flex:0 0 auto;min-height:110px;max-height:190px;padding:6px 0;border-top:1px solid var(--u6-line, #dedcd3);outline-offset:2px; }
.editor-layer.ws[data-ed-demo] .ws [data-wf-ref-list] { display:grid;grid-auto-flow:column;grid-auto-columns:calc(50% - 4px);gap:8px;overflow-x:auto; }
.editor-layer.ws[data-ed-demo] .ws [data-wf-ref-item] { min-width:0;position:relative; }
.editor-layer.ws[data-ed-demo] .ws [data-wf-ref-item] img { display:block;width:100%;height:100px;object-fit:contain;background:var(--u6-paper, #e9e6dd);border-radius:3px; }
.editor-layer.ws[data-ed-demo] .ws [data-wf-ref-item]>div { display:flex;justify-content:space-between;gap:3px; }
.editor-layer.ws[data-ed-demo] .ws [data-wf-ref-item] button,
.editor-layer.ws[data-ed-demo] .ws [data-wf-ref-item] select { background:transparent;border:0;font:inherit;font-size:10px; }
.editor-layer.ws[data-ed-demo] .ws [data-wf-ref-add] { height:120px;border:1px dashed var(--u6-line, #c9c6bb);background:transparent;font-size:28px;color:var(--u6-ink-soft, #99988f);border-radius:3px;cursor:pointer; }
.editor-layer.ws[data-ed-demo] .ws .ed-references small { font-size:10px;color:var(--u6-ink-soft, #847d6d); }
.editor-layer.ws[data-ed-demo] .ws .ed-references small:empty { display:none; }
.editor-layer.ws[data-ed-demo] .ws .ed-references.dragover { outline:2px solid var(--accent,#b8860b); }
@media(max-height:720px){.editor-layer.ws[data-ed-demo] .ws [data-wf-ref-item] img{height:65px}.editor-layer.ws[data-ed-demo] .ws [data-wf-ref-add]{height:85px}.editor-layer.ws[data-ed-demo] .ws .ed-references{min-height:90px}}

/* AvatarGroup-inspired motion, implemented locally without React dependencies. */
.personnel-entry .personnel-presence-preview { display:flex;flex-wrap:wrap;justify-content:flex-end;gap:5px 0;width:max-content;max-width:min(260px,calc(100vw - 32px));padding:8px 5px 10px 14px;border:0;border-radius:0;background:transparent;box-shadow:none;overflow:visible; }
.personnel-entry:focus-within .personnel-presence-preview { opacity:1;visibility:visible;transform:translateY(0);pointer-events:auto; }
.personnel-entry .personnel-presence-avatar { display:block;flex:0 0 32px;width:32px;height:32px;margin-left:-8px;border:0;background:transparent;box-shadow:none;filter:none;opacity:1;z-index:1;transition:transform 220ms cubic-bezier(.2,.8,.2,1);outline:none; }
.personnel-entry .personnel-avatar-face { position:relative;display:grid;place-items:center;box-sizing:border-box;width:100%;height:100%;border:2px solid var(--bg,#faf9f6);border-radius:50%;background:var(--avatar-color,#777);box-shadow:0 1px 4px #20211f26;color:white;font-size:10px; }
.personnel-entry .personnel-presence-avatar.off .personnel-avatar-face { filter:grayscale(1);opacity:.55; }
.personnel-entry .personnel-presence-avatar:hover,
.personnel-entry .personnel-presence-avatar:focus-visible { transform:translateY(-5px) scale(1.12);z-index:3; }
.personnel-entry .personnel-presence-avatar:focus-visible .personnel-avatar-face { outline:2px solid var(--accent,#b8860b);outline-offset:2px; }
.personnel-entry .personnel-avatar-tooltip { position:absolute;top:calc(100% + 9px);right:0;width:max-content;max-width:200px;box-sizing:border-box;padding:5px 8px;border-radius:5px;background:var(--u6-dark, #252924);color:#fff;font-size:11px;line-height:1.4;box-shadow:0 3px 10px #0002;opacity:0;visibility:hidden;transform:translateY(-4px) scale(.95);transform-origin:top right;pointer-events:none;transition:opacity 150ms ease,transform 180ms ease,visibility 150ms; }
.personnel-entry .personnel-avatar-tooltip small { display:block;font-size:9px;color:var(--u6-ink-mute, #c9cfc7); }
.personnel-entry .personnel-presence-avatar:hover .personnel-avatar-tooltip,
.personnel-entry .personnel-presence-avatar:focus-visible .personnel-avatar-tooltip { opacity:1;visibility:visible;transform:translateY(0) scale(1); }
@media(prefers-reduced-motion:reduce){.personnel-entry .personnel-presence-avatar,.personnel-entry .personnel-presence-preview,.personnel-entry .personnel-avatar-tooltip{transition:none}}
.personnel-entry .personnel-presence-avatar { transition:transform 320ms cubic-bezier(.34,1.56,.64,1); }
.personnel-entry .personnel-avatar-tooltip { transition:opacity 160ms ease,transform 280ms cubic-bezier(.34,1.56,.64,1),visibility 160ms; }
@media(prefers-reduced-motion:reduce){.personnel-entry .personnel-presence-avatar,.personnel-entry .personnel-avatar-tooltip{transition:none}}

/* Sidebar content clears the fixed 28px canvas header. */
.app-frame:has(.canvas-shell) .sidebar { padding-top:36px; min-height:0; flex-shrink:0; }
.app-frame:has(.canvas-shell) .sidebar-top { flex-shrink:0; }
.editor-layer.ws[data-ed-demo] .ws [data-wf-login] { border:0;background:transparent;color:var(--accent,#b8860b);font:inherit;font-size:11px;cursor:pointer;padding:2px 5px; }
.editor-layer.ws[data-ed-demo] .ws [data-wf-login]:focus-visible { outline:1px solid currentColor;outline-offset:2px; }

.editor-layer.ws[data-ed-demo] .ed-cfg-opts .ed-cfg-opt{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-height:30px;line-height:1.3}

.editor-layer.ws[data-ed-demo] .ws .ed-wf-iconcard,
.editor-layer.ws[data-ed-demo] .ws .ed-wf-iconcard:hover,
.editor-layer.ws[data-ed-demo] .ws .ed-wf-iconcard:focus-visible{border:0;border-radius:0;background:transparent;box-shadow:none;padding:6px 0 8px;gap:7px}
.editor-layer.ws[data-ed-demo] .ws .ed-wf-iconcard .ed-wf-ic{width:min(64px,100%);height:auto;aspect-ratio:1;flex-basis:auto;transition:transform .16s ease}
.editor-layer.ws[data-ed-demo] .ws .ed-wf-iconcard .ed-wf-ic svg{width:42px;height:42px}
.editor-layer.ws[data-ed-demo] .ws .ed-wf-iconcard .ed-wf-icon-flux{font-size:13px;border-radius:10px}
.editor-layer.ws[data-ed-demo] .ws .ed-wf-iconcard .ed-wf-icon-abbr{font-size:24px;border-radius:10px;background:#284c61;color:#fff}
.editor-layer.ws[data-ed-demo] .ws .ed-wf-iconcard .ed-wf-icon-plus{font-size:36px}
.editor-layer.ws[data-ed-demo] .ws .ed-wf-iconcard:hover .ed-wf-ic{transform:translateY(-2px) scale(1.04)}
.editor-layer.ws[data-ed-demo] .ws .ed-wf-iconcard:focus-visible .ed-wf-ic{outline:2px solid var(--accent,#365d4b);outline-offset:3px}
.editor-layer.ws[data-ed-demo] .ws .ed-wf-iconcard .ed-wf-icname{font-size:10px;line-height:1.3}
@media(prefers-reduced-motion:reduce){.editor-layer.ws[data-ed-demo] .ws .ed-wf-iconcard .ed-wf-ic{transition:none;transform:none}}

.ed-t2i{padding:8px;display:grid;gap:10px;font-size:11px}
.ed-t2i>button{border:0;background:transparent;text-align:left;cursor:pointer}
.ed-t2i textarea{width:100%;min-height:100px;resize:vertical;border:1px solid var(--u6-line, #d9d6ce);background:transparent;border-radius:4px;padding:8px}
.ed-t2i details label{display:flex;justify-content:space-between;margin:6px 0}
.ed-t2i input{width:90px}
.ed-t2i [data-t2i-results]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px}
.ed-t2i img{width:100%;height:auto}
.ed-t2i [data-t2i-status]:empty{display:none}
.ed-t2i [data-t2i-run]{justify-self:end;background:var(--accent,#365d4b);color:white;padding:6px 14px;border-radius:4px}


/* Drawing options belong to the selected tool, independently of generation workflows. */
.editor-layer.ws[data-ed-demo] .ws .ed-draw-properties { flex:0 0 auto; margin-top:auto; padding:9px 10px; pointer-events:auto; background:var(--u6-paper, #f8f7f2); border-top:1px solid var(--u6-line, #dedcd3); border-bottom:1px solid var(--u6-line, #dedcd3); z-index:12; }
.editor-layer.ws[data-ed-demo] .ws .ed-draw-properties:empty { display:none; }
.editor-layer.ws[data-ed-demo] .ws .ed-draw-properties:not(:empty) + .ed-composer { margin-top:0; }
.editor-layer.ws[data-ed-demo] .ws .ed-draw-properties .ed-toolopts { flex-wrap:wrap; gap:6px; }
.editor-layer.ws[data-ed-demo] .ws .ed-draw-properties .ed-toolopts > .ed-topt { flex:0 0 auto; min-height:28px; }
.editor-layer.ws[data-ed-demo] .ws .ed-draw-properties .ed-toolopts > .ed-topt > span:first-of-type { display:inline; }
.editor-layer.ws[data-ed-demo] .ws .ed-draw-properties .ed-topt-v { max-width:74px; }
.editor-layer.ws[data-ed-demo] .ws .ed-draw-properties .ed-topt-pop { max-width:100%; }

.editor-layer.ws[data-ed-demo] .ws .ed-draw-properties .ed-toolopts { display:flex; }
.editor-layer.ws[data-ed-demo] .ws .ed-draw-properties .ed-toolopts > .ed-topt { width:auto; padding:4px 7px; }
.editor-layer.ws[data-ed-demo] .ws .ed-draw-properties .ed-toolopts > .ed-topt > span { overflow:visible; text-overflow:clip; }
.editor-layer.ws[data-ed-demo] .ws .ed-draw-properties [data-ed-topt="color"] .ed-topt-v { display:none; }
.editor-layer.ws[data-ed-demo] .ws .ed-draw-properties .ed-topt-pop .ed-topt-row { flex-direction:row; flex-wrap:wrap; align-items:center; }

/* One click opens the actual control: continuous values vertically, choices directly. */
.editor-layer.ws[data-ed-demo] .ws .ed-draw-properties .ed-horizontal-pop { padding:10px 6px; overflow:hidden; align-items:center; }
.editor-layer.ws[data-ed-demo] .ws .ed-draw-properties .ed-horizontal-value { display:flex; flex-direction:column; align-items:center; gap:9px; margin:0; width:100%; white-space:nowrap; }
.editor-layer.ws[data-ed-demo] .ws .ed-draw-properties .ed-horizontal-value output { font-size:11px; color:var(--u6-pick-deep, #345c49); line-height:18px; }
.editor-layer.ws[data-ed-demo] .ws .ed-draw-properties .ed-horizontal-value input[type="range"] { writing-mode:horizontal-tb; direction:ltr; appearance:auto; width:100%; min-width:0; height:22px; min-height:22px; margin:0; padding:0; cursor:ew-resize; }
.editor-layer.ws[data-ed-demo] .ws .ed-draw-properties .ed-choice-pop { padding:4px; overflow-x:hidden; }
.editor-layer.ws[data-ed-demo] .ws .ed-draw-properties .ed-choice-pop .ed-topt-row,
.editor-layer.ws[data-ed-demo] .ws .ed-draw-properties .ed-direct-list { display:flex; flex-direction:column; align-items:stretch; gap:2px; width:100%; }
.editor-layer.ws[data-ed-demo] .ws .ed-draw-properties .ed-choice-pop .ed-ls { width:100%; min-height:30px; padding:6px 10px; text-align:left; border:0; border-radius:3px; }
.editor-layer.ws[data-ed-demo] .ws .ed-draw-properties .ed-choice-pop .ed-ls:hover { background:var(--u6-paper, #eeede6); }
.editor-layer.ws[data-ed-demo] .ws .ed-draw-properties .ed-choice-pop .ed-ls.on { color:var(--u6-pick-deep, #24503c); background:var(--u6-paper, #e8f0e9); }

/* Workflow details share the same icon size and single composer. */
.editor-layer.ws[data-ed-demo] .ws .ed-wf-dicon { width:64px;height:64px;flex:0 0 64px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-dicon svg { width:42px;height:42px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-icon-prompt { display:flex;align-items:center;justify-content:center;width:100%;height:100%;background:var(--u6-gold, #e7d9ad);color:var(--u6-gold, #67572d);border-radius:12px; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-dicon .ed-wf-icon-abbr { font-size:24px;border-radius:10px; }
.editor-layer.ws[data-ed-demo].ed-t2i-mode .ws-canvas { visibility:hidden;pointer-events:none; }
.editor-layer.ws[data-ed-demo].ed-t2i-mode .ed-draw-properties { display:none; }
.editor-layer.ws[data-ed-demo] [data-ed-t2i-mount] { flex:0 0 auto;max-height:180px;overflow:auto; }
.editor-layer.ws[data-ed-demo] [data-ed-t2i-mount] .ed-t2i { padding:6px 0;gap:4px; }

.editor-layer.ws[data-ed-demo].ed-t2i-mode { background:var(--u6-paper, #efeee8); }

.editor-layer.ws[data-ed-demo] .ws .ed-toolbar { overflow:hidden; }
.editor-layer.ws[data-ed-demo] .ws .ed-drawing-tools { min-height:0;flex:1 1 auto;overflow-y:auto;scrollbar-width:none;display:flex;flex-direction:column;align-items:center;gap:3px;width:100%; }
.editor-layer.ws[data-ed-demo] .ws .ed-workflow-tools { flex:0 0 auto;display:flex;flex-direction:column;align-items:center;gap:3px; }

/* Binary options switch directly; no submenu or second click. */
.editor-layer.ws[data-ed-demo] .ws .ed-inline-switch { display:inline-flex;align-items:center;gap:7px;min-height:28px;padding:3px 6px;border:0;background:transparent;color:var(--u6-ink, #55584f);font:inherit;font-size:11px;white-space:nowrap;cursor:pointer; }
.editor-layer.ws[data-ed-demo] .ws .ed-switch-track { width:30px;height:18px;flex:0 0 30px;background:var(--u6-wash, #c9cbc5);border-radius:999px;box-shadow:inset 0 0 0 1px #00000009;transition:background-color .18s ease; }
.editor-layer.ws[data-ed-demo] .ws .ed-switch-thumb { display:block;width:14px;height:14px;margin:2px;border-radius:50%;background:var(--surface);box-shadow:0 1px 3px #0003;transform:translateX(0);transition:transform .18s ease; }
.editor-layer.ws[data-ed-demo] .ws .ed-inline-switch[aria-checked="true"] .ed-switch-track { background:var(--u6-pick-deep, #365d4b); }
.editor-layer.ws[data-ed-demo] .ws .ed-inline-switch[aria-checked="true"] .ed-switch-thumb { transform:translateX(12px); }
.editor-layer.ws[data-ed-demo] .ws .ed-inline-switch:focus-visible { outline:2px solid var(--u6-pick-deep, #365d4b);outline-offset:2px;border-radius:4px; }
.editor-layer.ws[data-ed-demo] .ws .ed-inline-switch:disabled { opacity:.45;cursor:not-allowed; }
@media(prefers-reduced-motion:reduce){.editor-layer.ws[data-ed-demo] .ws .ed-switch-track,.editor-layer.ws[data-ed-demo] .ws .ed-switch-thumb{transition:none;}}

.editor-layer.ws[data-ed-demo] .ws .ed-line-sample { display:block;width:58px;height:16px;flex:0 0 auto; }
.editor-layer.ws[data-ed-demo] .ws .ed-line-trigger .ed-line-sample { width:42px; }
.editor-layer.ws[data-ed-demo] .ws [data-ed-topt-pop="line"] .ed-ls { display:flex;justify-content:center;align-items:center; }

.editor-layer.ws[data-ed-demo] .ws[data-ed-wf-open] { --ed-wf:400px; }
.editor-layer.ws[data-ed-demo].max .ws[data-ed-wf-open] { --ed-wf:420px; }
@media(max-width:1000px){.editor-layer.ws[data-ed-demo] .ws[data-ed-wf-open]{--ed-wf:340px;}}
.editor-layer.ws[data-ed-demo] .ws [data-ed-topt-pop="font"] { overflow:hidden; }
.editor-layer.ws[data-ed-demo] .ws .ed-font-list { max-height:160px;overflow-y:auto;scrollbar-width:none;overscroll-behavior:contain; }
.editor-layer.ws[data-ed-demo] .ws .ed-font-list::-webkit-scrollbar { display:none; }
.editor-layer.ws[data-ed-demo] .ws .ed-font-list .ed-ls { flex:0 0 30px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap; }

/* Every prompt template category uses the same border-only interaction state. */
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tile { transition:border-color 150ms ease; }
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tile.on,
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tile:hover,
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tile:focus,
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tile:focus-visible { border-color:var(--accent,#b8860b);background:var(--u6-paper, #fbfaf5);box-shadow:none;outline:none;transform:none; }

/* Horizontal order: tool attributes, workflow controls, composer. */
.editor-layer.ws[data-ed-demo] .ws .ed-wf-panel > .ed-draw-properties { margin-top:0; padding:8px 0; background:transparent; border-bottom:0; }

/* Selected tool owns up to five property buttons in the same toolbar. */
.editor-layer.ws[data-ed-demo] .ws .ed-toolbar { overflow:visible; }
.editor-layer.ws[data-ed-demo] .ws .ed-toolbar > .ed-draw-properties { width:100%;margin:0;padding:5px 0;flex:0 0 auto;background:transparent;border-bottom:0;z-index:20; }
.editor-layer.ws[data-ed-demo] .ws .ed-toolbar .ed-draw-properties .ed-toolopts { display:flex;flex-direction:column;flex-wrap:nowrap;align-items:center;gap:3px; }
.editor-layer.ws[data-ed-demo] .ws .ed-toolbar .ed-draw-properties .ed-toolopts > button { width:32px;height:32px;min-height:32px;padding:0;justify-content:center;border:0;background:transparent;border-radius:6px; }
.editor-layer.ws[data-ed-demo] .ws .ed-toolbar .ed-draw-properties .ed-toolopts > button:hover { background:var(--u6-paper, #deddd4); }
.editor-layer.ws[data-ed-demo] .ws .ed-toolbar .ed-toolopts > .ed-topt > span:first-of-type,
.editor-layer.ws[data-ed-demo] .ws .ed-toolbar [data-ed-topt="color"] .ed-topt-v,
.editor-layer.ws[data-ed-demo] .ws .ed-toolbar .ed-inline-switch > span:last-child { display:none; }
.editor-layer.ws[data-ed-demo] .ws .ed-toolbar .ed-toolopts > .ed-topt > .ed-topt-v { display:block;font-size:10px;max-width:30px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap; }
.editor-layer.ws[data-ed-demo] .ws .ed-toolbar [data-ed-topt="color"] > .ed-topt-v { display:none; }
.editor-layer.ws[data-ed-demo] .ws .ed-toolbar .ed-line-trigger .ed-line-sample { width:26px; }
.editor-layer.ws[data-ed-demo] .ws .ed-toolbar [data-ed-number-reset],
.editor-layer.ws[data-ed-demo] .ws .ed-toolbar [data-ed-mask-clear] { font-size:0; }
.editor-layer.ws[data-ed-demo] .ws .ed-toolbar [data-ed-number-reset]::after { content:'1↺';font-size:14px; }
.editor-layer.ws[data-ed-demo] .ws .ed-toolbar [data-ed-mask-clear]::after { content:'×';font-size:20px; }
.editor-layer.ws[data-ed-demo] .ws .ed-toolbar .ed-topt-pop { z-index:100;max-width:none; }
.editor-layer.ws[data-ed-demo] .ws .ed-toolbar .ed-toolopts > .ed-topt[data-ed-topt="color"] > .ed-topt-v { display:none; }
/* Tool popovers must paint and receive input above the workflow rail (z-index:7). */
.editor-layer.ws[data-ed-demo] .ws .ed-toolbar { z-index:8; }

/* Child viewpoints use the project canvas, not a second fullscreen editor. */
.header-path.child-path{display:flex;align-items:center;gap:5px;max-width:60vw;white-space:nowrap}
.child-path button{font:inherit;color:inherit;border:0;background:none;padding:0;cursor:pointer}
.child-path [data-child-name]{overflow:hidden;text-overflow:ellipsis;font-size:11px;opacity:.7}
.child-canvas .child-agent{position:absolute;inset:auto 20px 24px auto;width:268px;padding:12px;border:1px solid var(--u6-line, #ddd8ce);border-radius:8px;background:#faf9f5ed;z-index:25;box-shadow:0 4px 20px #0000000a}
.child-agent .ca-title{display:flex;justify-content:space-between;align-items:center;font-size:11px;margin:0 0 8px}
.child-agent textarea{box-sizing:border-box;width:100%;resize:vertical;border:0;background:transparent;outline:none;font:12px/1.6 inherit}
.child-agent .ca-row{display:flex;align-items:center;gap:8px;margin:8px 0 0;font-size:11px}
.child-agent button,.child-agent select{font:inherit;border:0;border-radius:3px;padding:5px 7px;background:var(--u6-paper, #ebe8e0);color:inherit;cursor:pointer}
.child-agent .ca-run{margin-left:auto;width:auto}
.child-agent .ca-stat:empty{display:none}
.child-agent .ca-stat{font-size:10px;margin-top:7px;max-height:90px;overflow:auto}
.child-canvas .child-agent .ca-title{display:flex;flex-direction:row;justify-content:space-between;text-align:left}
.child-canvas .zoom-control{right:20px;bottom:210px}
.child-canvas .create-stack{pointer-events:none}
body:has(.child-canvas){min-width:0}
/* CONN-B（#397 交付B）：连线派生输入呈现区——手动参考存储零触碰，仅呈现 + 每行语义标注 */
.editor-layer.ws[data-ed-demo] .ed-conn-inputs { margin-top:6px;padding-top:5px;border-top:1px dashed var(--u6-line, #dedcd3);display:flex;flex-direction:column;gap:3px; }
.editor-layer.ws[data-ed-demo] .ed-conn-inputs .ed-conn-head { margin:0;font-size:10px;color:var(--u6-ink-soft, #847d6d); }
.editor-layer.ws[data-ed-demo] .ed-conn-inputs .ed-conn-row { display:flex;align-items:baseline;gap:6px;font-size:11px;color:var(--u6-ink, #4c473d);min-width:0; }
.editor-layer.ws[data-ed-demo] .ed-conn-inputs .ed-conn-row small { font-size:10px;color:var(--u6-ink-soft, #847d6d);overflow:hidden;text-overflow:ellipsis;white-space:nowrap; }
.editor-layer.ws[data-ed-demo] .ed-conn-inputs .ed-conn-tag { flex:0 0 auto;font-size:10px;padding:1px 5px;border-radius:3px;background:var(--u6-paper, #ebe8e0);color:var(--u6-ink-soft, #6b6557); }
.editor-layer.ws[data-ed-demo] .ed-conn-inputs .ed-conn-tag[data-conn-kind="ref"] { background:var(--u6-paper, #f6e3e0);color:var(--u6-flag, #8a4638); }
.editor-layer.ws[data-ed-demo] .ed-conn-inputs .ed-conn-tag[data-conn-kind="line"] { background:var(--u6-paper, #efece4);color:var(--u6-ink-soft, #9a9384); }
.editor-layer.ws[data-ed-demo] .ed-conn-inputs .ed-conn-name { overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0; }

/* One staff account; password and WeChat are credential methods. */
.personnel-main-avatar { overflow:hidden; }
.personnel-main-avatar img { width:100%;height:100%;object-fit:cover;border-radius:50%; }
.account-menu { position:absolute;top:calc(100% + 10px);right:0;z-index:120;min-width:190px;padding:8px;border:1px solid var(--u6-line, #d4d3cc);border-radius:10px;background:var(--u6-paper, #faf9f6);color:var(--u6-ink, #27372f);box-shadow:0 8px 30px #0002; }
.account-menu[hidden] { display:none; }
.account-menu strong { display:block;padding:8px 10px;font-size:13px; }
.account-menu button { display:block;width:100%;text-align:left;padding:10px;border:0;border-radius:6px;background:transparent;color:inherit;cursor:pointer;font-size:12px; }
.account-menu button:hover,.account-menu button:focus-visible { background:var(--u6-paper, #e7e9e3); }
.personnel-entry:has(.account-menu:not([hidden])) .personnel-presence-preview { display:none; }
.project-load-message { padding:12px 16px;border:1px solid var(--u6-line, #c4c8bd);border-radius:8px; }
.project-load-message button { margin-left:12px;cursor:pointer; }

/* NARROW-R1: at narrow widths the in-flow property band competed with the tool list for rail height and clipped the text tool button out of reach; take it out of flow and float it left of the rail. Wide-screen in-flow contract (above) unchanged. */
@media (max-width:1000px) { .editor-layer.ws[data-ed-demo] .ws .ed-toolbar > .ed-draw-properties { position:absolute; right:100%; top:50%; transform:translateY(-50%); width:auto; padding:5px 4px; background:var(--u6-paper, #f8f7f2); border:1px solid var(--u6-line, #dedcd3); border-right:0; border-radius:8px 0 0 8px; } }

/* NARROW-POP-R1: the band's transform:translateY(-50%) made the floated band the containing block for the fixed-position .ed-topt-pop menus, so edToptOpen's viewport-space inline left/top resolved against the band and pushed pop boxes off-screen (measured 900×700: font pop@1424,334; parent-diag band.x+pop.left reproduces exactly). Re-center the band with a transform-free equivalent — absolute top:0/bottom:0 + auto block margins + height:fit-content — geometry-identical to translateY(-50%) (band rect unchanged), restoring viewport resolution for the fixed pops. Pure append after NARROW-R1's block at identical specificity; wide-screen untouched (same max-width:1000px gate); NARROW-R1 rule bytes unmodified. */
@media (max-width:1000px) { .editor-layer.ws[data-ed-demo] .ws .ed-toolbar > .ed-draw-properties { transform:none; top:0; bottom:0; height:fit-content; margin-top:auto; margin-bottom:auto; } }
/* BOT-TOOLBAR-HEIGHT-1001: the unconditional in-flow property band (rule above) consumed 148px+ of the fixed-height rail's scroll budget at EVERY width — measured tool-list scrollHeight=832 vs clientHeight 373 at 1001x700 and 623 at 1600x950 — so it painted over clipped tool buttons (1001x700 select-state firstSight hits: number/eyedropper/grayscale/layers/mask/undo/redo/clearann/save/export/delann landing on band/color pill/switch pill; 1600x950: redo..fit under the band) and wheel-over-pill cannot scroll the tool column. NARROW-R1's out-of-rail treatment was gated to max-width:1000px, which turned the occlusion into a width discontinuity (1000 clean, 1001 broken). This unifies the band out of the rail at all widths using NARROW-POP-R1's transform-free geometry (absolute right:100%; top:0/bottom:0; auto block margins; height:fit-content — no transform anywhere, so no fixed-pop containing-block hijack). At <=1000px the computed geometry is identical to the NARROW-R1 + NARROW-POP-R1 gated rules already in force; those bytes are unmodified. */
.editor-layer.ws[data-ed-demo] .ws .ed-toolbar > .ed-draw-properties { position:absolute; right:100%; top:0; bottom:0; height:fit-content; margin-top:auto; margin-bottom:auto; transform:none; width:auto; padding:5px 4px; background:var(--u6-paper, #f8f7f2); border:1px solid var(--u6-line, #dedcd3); border-right:0; border-radius:8px 0 0 8px; }
/* REV3-E（2026-09-18 修正单6）生成器大卡：来源行/徽标/参考条/控件网格/运行钮，纯前端桩态样式 */
.generator-body.gen3 { display: flex; flex-direction: column; gap: 6px; height: 100%; padding: 10px 12px; box-sizing: border-box; overflow: hidden; }
.gen3 .gen-toprow { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.gen3 .gen-stub-badge { font-size: 11px; color: var(--u6-ink-soft, #8a94a6); border: 1px solid rgba(138, 148, 166, .45); border-radius: 10px; padding: 1px 8px; white-space: nowrap; }
.gen3 .gen-strip-label { margin: 2px 0 0; }
.gen3 .gen-ref-strip { display: flex; align-items: center; gap: 6px; min-height: 46px; border: 1px dashed rgba(255, 255, 255, .18); border-radius: 8px; padding: 4px 6px; overflow-x: auto; }
.gen3 .gen-ref-thumb { height: 38px; width: auto; border-radius: 5px; object-fit: cover; flex: 0 0 auto; }
.gen3 .gen-ref-chip { font-size: 11px; background: rgba(255, 255, 255, .08); border-radius: 10px; padding: 2px 8px; white-space: nowrap; }
.gen3 .gen-ref-empty { font-size: 11px; color: var(--u6-ink-soft, #8a94a6); white-space: nowrap; }
.gen3 .gen-ref-add { width: 28px; height: 28px; flex: 0 0 auto; border-radius: 6px; border: 1px solid rgba(255, 255, 255, .28); background: transparent; color: #cfd6e0; font-size: 16px; line-height: 1; cursor: pointer; }
.gen3 textarea[data-gen-prompt] { flex: 1 1 auto; min-height: 96px; resize: none; }
.gen3 .gen-controls { display: flex; flex-wrap: wrap; gap: 6px 10px; align-items: flex-end; }
.gen3 .gen-ctl { display: flex; flex-direction: column; gap: 2px; font-size: 11px; color: var(--u6-ink-soft, #8a94a6); }
.gen3 .gen-ctl select { font-size: 12px; max-width: 128px; }
.gen3 .gen-provider-val { font-size: 12px; color: #cfd6e0; white-space: nowrap; }
.gen3 .gen-run { margin-top: auto; }
/* GEN-COMPACT-R1：紧凑生成介质卡，来源为单开关，媒体为文字模式选择。 */
.generator-card .card-head,.generator-card .card-meta { display:none; }
.generator-card { background:var(--u6-paper, #fbfbfa); border:1px solid var(--u6-line, #e4e5e1); border-radius:16px; box-shadow:var(--sh-rest); }
.generator-body.gen-compact { position:relative; height:100%; padding:8px 10px 9px; gap:7px; color:var(--u6-ink-soft, #5f625f); background:var(--u6-paper, #fbfbfa); overflow:hidden; }
.gen-compact-top { display:flex; align-items:center; gap:10px; min-height:28px; }
.gen-source-toggle { display:inline-flex; align-items:center; gap:6px; border:0; background:var(--u6-paper, #f0f1ef); color:var(--u6-ink-soft, #737672); border-radius:9px; padding:6px 8px; font-size:10px; cursor:pointer; white-space:nowrap; }
.gen-source-toggle i { width:23px; height:13px; border-radius:9px; background:var(--u6-wash, #c9cbc7); position:relative; display:inline-block; }
.gen-source-toggle i::after { content:""; position:absolute; width:9px; height:9px; left:2px; top:2px; border-radius:50%; background:var(--surface); box-shadow:0 1px 2px #0002; transition:.16s; }
.gen-source-toggle.is-comfy { color:var(--u6-ink, #26382f); background:var(--u6-paper, #e8eee9); }
.gen-source-toggle.is-comfy i { background:var(--u6-pick-deep, #365548); }
.gen-source-toggle.is-comfy i::after { left:12px; }
.gen-compact .gen-mode-tabs { display:flex; align-items:center; gap:12px; flex:1; }
.gen-compact .gen-mode-tabs button { border:0; padding:4px 0; border-radius:0; background:transparent; color:var(--u6-ink-soft, #989b97); font-size:10px; cursor:pointer; }
.gen-compact .gen-mode-tabs button.on { color:var(--u6-ink, #1f2d27); font-weight:700; border-bottom:2px solid var(--u6-line, #273a31); }
.gen-collapse { width:25px; height:25px; border:0; border-radius:8px; background:var(--u6-paper, #f0f1ef); color:var(--u6-ink-soft, #777b77); cursor:pointer; font-size:14px; line-height:1; }
.gen-collapse[aria-expanded="false"] { transform:rotate(180deg); }
.gen-compact-content { display:flex; flex-direction:column; gap:7px; min-height:0; height:calc(100% - 35px); }
.gen-compact.is-collapsed .gen-compact-content { display:none; }
.gen-ref-strip { display:flex; align-items:center; gap:6px; min-height:51px; padding:3px 2px; overflow-x:auto; border:0; }
.gen-ref-add { width:42px; height:42px; flex:0 0 42px; border:0; border-radius:10px; background:var(--u6-paper, #f1f2ef); color:var(--u6-ink-soft, #a3a7a2); font-size:22px; cursor:pointer; }
.gen-ref-item { position:relative; display:flex; flex:0 0 auto; flex-direction:column; align-items:center; gap:1px; width:47px; border:0; padding:0; background:transparent; color:var(--u6-ink-soft, #737772); font-size:7px; cursor:grab; }
.gen-ref-item img { width:38px; height:42px; border-radius:6px; object-fit:cover; box-shadow:0 1px 4px #0002; pointer-events:none; }
.gen-ref-item span { max-width:45px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.gen-ref-empty { font-size:9px; color:var(--u6-ink-mute, #adb0ac); }
.gen-compact textarea[data-gen-prompt] { flex:1 1 auto; min-height:90px; width:100%; resize:none; border:1px solid var(--u6-line, #e5e7e4); border-radius:12px; background:var(--u6-paper, #fafbfa); padding:11px; color:var(--u6-ink, #4f534f); font-size:11px; outline:none; }
.gen-compact textarea[data-gen-prompt]:focus { border-color:var(--u6-line, #9eafa4); box-shadow:0 0 0 2px #dfe9e1; }
.gen-compact .gen-controls { display:flex; flex-wrap:wrap; align-items:flex-end; gap:5px 8px; padding-right:34px; }
.gen-compact .gen-ctl { display:flex; flex-direction:column; gap:2px; min-width:62px; }
.gen-compact .gen-ctl label { font-size:8px; color:var(--u6-ink-soft, #9a9e99); }
.gen-compact .gen-ctl select { max-width:106px; border:0; background:transparent; color:var(--u6-ink, #545b56); padding:1px 12px 1px 0; font-size:9px; outline:none; }
.gen-run-icon { position:absolute; right:9px; bottom:10px; width:29px; height:29px; border:0; border-radius:50%; background:var(--u6-dark, #26352f); color:#fff; font-size:16px; line-height:1; cursor:pointer; opacity:.18; transition:opacity .15s; }
.generator-card:hover .gen-run-icon,.gen-run-icon:focus-visible { opacity:1; }
.gen-status { color:var(--u6-ink-soft, #a4a8a3); font-size:8px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.gen-ref-preview { position:fixed; z-index:120; width:200px; max-height:170px; padding:5px; border:1px solid var(--u6-line, #d7dad5); border-radius:10px; background:var(--surface); box-shadow:0 12px 30px #0003; pointer-events:none; }
.gen-ref-preview[hidden] { display:none; }
.gen-ref-preview img { display:block; width:190px; max-height:160px; object-fit:contain; border-radius:6px; }
/* R7-GENREF（2026-09-23 票①③）：参考缩略图 图N 编号徽标 + hover 移除 ×（独立小补丁，仅 .gen-ref-item 面；.gen-ref-item 既有 position:relative 直接复用） */
.gen-ref-item .gen-ref-no { position:absolute; top:1px; left:1px; z-index:2; padding:0 3px; border-radius:5px; background:rgba(15,23,42,.72); color:#fff; font-size:8px; font-weight:600; line-height:12px; pointer-events:none; }
.gen-ref-item .gen-ref-del { position:absolute; top:-5px; right:-5px; z-index:3; width:15px; height:15px; display:none; align-items:center; justify-content:center; border-radius:50%; background:var(--u6-dark, #26352f); color:#fff; font-style:normal; font-size:11px; line-height:1; cursor:pointer; box-shadow:0 1px 3px #0004; }
.gen-ref-item:hover .gen-ref-del, .gen-ref-item:focus-within .gen-ref-del { display:flex; }
.gen-ref-item .gen-ref-del:hover { background:#b91c1c; }

/* GEN-COMPACT-R2: prompt-contained submit, two parameter rows, downward settings. */
.gen-compact-top {gap:7px; min-height:26px; flex-shrink:0}
.gen-source-toggle {gap:0;padding:2px;border-radius:7px;background:var(--u6-paper, #eeefed)}
.gen-source-toggle span {padding:4px 5px;border-radius:5px;color:var(--u6-ink-soft, #969a96);font-size:9px}
.gen-source-toggle span.active {background:var(--u6-dark, #293a31);color:#fff;box-shadow:0 1px 3px #0002}
.gen-source-toggle.is-comfy {background:var(--u6-paper, #eeefed)}
.gen-compact .gen-mode-tabs {gap:7px}
.gen-compact .gen-mode-tabs button {display:inline-flex;align-items:center;gap:3px;font-size:10px}
.gen-collapse {flex:0 0 22px;width:22px;height:22px;display:grid;place-items:center;transform:none}
.gen-collapse[aria-expanded="false"] {transform:none}
.gen-collapse[aria-expanded="true"] svg {transform:rotate(180deg)}
.gen-compact-content {height:auto;flex:1;gap:6px}
.gen-prompt-box {position:relative;flex:1;min-height:82px;display:flex}
.gen-compact .gen-prompt-box textarea {height:100%;min-height:82px;padding:9px 10px 32px;border-radius:10px}
.generator-body.gen-compact .gen-prompt-box [data-gen-exec] {position:absolute;right:7px;bottom:7px;width:24px;height:24px;padding:0;display:grid;place-items:center;border-radius:7px;opacity:0;pointer-events:none;transition:opacity .15s}
.generator-body.gen-compact .gen-prompt-box:hover [data-gen-exec],.generator-body.gen-compact .gen-prompt-box:focus-within [data-gen-exec] {opacity:1;pointer-events:auto}
.gen-compact .gen-controls {display:grid;grid-template-columns:repeat(12,minmax(0,1fr));grid-template-rows:23px 23px;gap:3px 5px;padding:0;flex-shrink:0}
.gen-compact .gen-ctl {grid-column:span 4;flex-direction:row;align-items:center;gap:4px;min-width:0;color:var(--u6-ink-soft, #7e857e)}
.gen-compact .gen-ctl:nth-child(n+4) {grid-column:span 3}
.gen-compact .gen-ctl svg {flex:0 0 12px;width:12px;height:12px}
.gen-compact .gen-ctl select {width:100%;min-width:0;max-width:none;font-size:10px;padding:2px 0;color:var(--u6-ink, #505950)}
.gen-extra-settings {height:50px;flex-shrink:0;border-top:1px solid var(--u6-line, #e6e8e4);padding:12px 2px;font-size:10px;color:var(--u6-ink-soft, #92998f)}
.gen-extra-settings[hidden] {display:none}
/* LAYOUT-CURRENT-DRAG-R7 rule#3（沿 R5 已证方案，EOF 级联位）：卡态执行钮脱离 textarea 命中面=box 分栏正常流
   （textarea flex:1|min-width:0 + 钮独立列 static/auto）。父红：传送态 elementFromPoint(钮中心)=TEXTAREA+actionability 拦截。
   textarea 聚焦/pill 空白展开/expanded 面零触碰；非扩热区非隐藏。 */
.generator-body.gen-compact .gen-prompt-box [data-gen-exec] { position: static; opacity: 1; pointer-events: auto; margin: 5px; align-self: center; order: 2; }
.generator-body.gen-compact .gen-prompt-box textarea { flex: 1 1 auto; min-width: 0; }

/* Approved recipe UI: real editor hosts, retained action dock and assets. */
.editor-layer.ws[data-ed-demo] .recipe-batch {font-size:11px;padding:6px 0;color:var(--text,#29261f)}
.recipe-quantity,.recipe-mode {display:flex;align-items:center;justify-content:space-between;gap:6px;margin-bottom:6px}
.recipe-quantity>div {display:flex;gap:4px}
.recipe-quantity button {min-width:25px;height:25px;border:1px solid var(--border,#d9ceba);background:var(--surface,#faf8f2);color:inherit;border-radius:4px}
.recipe-quantity button[aria-pressed=true] {background:var(--accent,#785b1e);color:#fff}
.recipe-batch select {min-width:0;font:inherit;height:28px;color:inherit;background:var(--surface,#faf8f2);border:1px solid var(--border,#d9ceba);border-radius:4px}
.recipe-assignments {max-height:100px;overflow:auto}
.recipe-assignment {display:flex;align-items:center;gap:5px;margin-bottom:4px}
.recipe-assignment>span {width:24px;flex-shrink:0}
.recipe-assignment>[data-recipe-source] {width:80px;flex-shrink:0}
.recipe-batch p {font-size:11px;line-height:1.5;margin:5px 0;color:var(--text,#51452f)}
.recipe-grid {position:absolute;inset:0;display:grid;gap:4px;background:var(--surface,#faf8f2);z-index:6}
.recipe-grid[hidden] {display:none}
[data-recipe-grid-open]>.ed-canvas,[data-recipe-grid-open]>.ed-cropcv,[data-recipe-grid-open]>.ed-inputlayer,[data-recipe-grid-open]>.ws-img {visibility:hidden}
.recipe-grid article {position:relative;min-width:0;min-height:0;display:grid;place-items:center;background:var(--chip-bg,#f6f3ec);border:1px solid var(--border,#e1dacd);overflow:hidden}
.recipe-grid article>div {display:flex;flex-direction:column;align-items:center;gap:8px;color:var(--text,#51452f)}
.recipe-grid strong {font-size:24px;font-weight:400}
.recipe-grid footer {position:absolute;bottom:0;left:0;right:0;display:flex;justify-content:space-between;gap:8px;padding:6px 8px;opacity:0;background:var(--surface,#faf8f2);font-size:11px;pointer-events:none}
.recipe-grid footer span {white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.recipe-grid article:hover footer,.recipe-grid article:focus-visible footer {opacity:1}
.recipe-grid footer:has(button) {opacity:1}
.recipe-grid footer button {pointer-events:auto}
/* 结果缩略图：成功图在 slot 内呈现**真实结果像素**（不是纯状态文字卡）。图不可用时具名说明，绝不给空图。 */
.recipe-thumb {position:absolute;inset:0;display:grid;place-items:center;background:#2b2b2b}
.recipe-thumb img {width:100%;height:100%;object-fit:contain;display:block}
.recipe-thumb>em {font-size:11px;line-height:1.5;text-align:center;padding:0 10px;color:#f2ece0;font-style:normal}
.recipe-thumb-note {position:absolute;right:4px;top:4px;padding:1px 5px;border-radius:4px;background:rgba(120,60,10,.85);color:#fff;font-size:10px;font-style:normal}
.recipe-grid article[data-recipe-state="success"]>div {position:absolute;top:4px;left:4px;z-index:2;flex-direction:row;align-items:baseline;gap:4px;padding:1px 6px;border-radius:4px;background:rgba(250,248,242,.86)}
.recipe-grid article[data-recipe-state="success"]>div strong {font-size:13px}
.recipe-unsaved {padding:1px 5px;border-radius:4px;background:#8a2f24;color:#fff;font-size:10px;font-style:normal;white-space:nowrap}
.recipe-grid article:focus-visible,.recipe-batch :focus-visible {outline:2px solid var(--accent,#785b1e);outline-offset:-2px}
.editor-layer.ws[data-ed-demo] .ws .ed-wf-dhead {padding:2px 0;gap:8px}
.editor-layer.ws[data-ed-demo] .ws .ed-wf-dicon {width:32px;height:32px;min-width:32px;min-height:32px;border-radius:5px}
.editor-layer.ws[data-ed-demo] .ws .ed-wf-ddesc {display:none}
.editor-layer.ws[data-ed-demo] .ws .ed-wf-catrow {margin:4px 0}
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tiles {grid-template-columns:repeat(4,minmax(0,1fr));gap:4px;grid-auto-rows:76px}
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tile img {height:48px;width:100%;object-fit:cover}
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tile span {font-size:11px}
.editor-layer.ws[data-ed-demo] .ws .ed-wf-body {min-height:236px;max-height:236px;overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--accent,#785b1e) transparent}
.ed-template-actions {display:flex;gap:8px;padding:4px 0;font-size:11px}
@media(max-height:820px){.recipe-assignments{max-height:64px}}
.editor-layer.ws[data-ed-demo] .ws .ed-composer .ed-references {min-height:0;max-height:66px;padding:4px 8px 0;border:0;overflow:auto;flex:0 0 auto}
.editor-layer.ws[data-ed-demo] .ws .ed-composer [data-wf-ref-list] {display:flex;gap:6px;min-height:0}
.editor-layer.ws[data-ed-demo] .ws .ed-composer [data-wf-ref-item] {display:flex;align-items:center;flex:0 0 auto;width:auto;max-width:160px;gap:4px}
.editor-layer.ws[data-ed-demo] .ws .ed-composer [data-wf-ref-item] img {width:40px;height:30px;object-fit:cover}
.editor-layer.ws[data-ed-demo] .ws .ed-composer [data-wf-ref-item]>div {display:flex;gap:2px;align-items:center}
.editor-layer.ws[data-ed-demo] .ws .ed-composer [data-wf-ref-role] {width:48px;font-size:11px}
.editor-layer.ws[data-ed-demo] .ws .ed-composer [data-wf-ref-left] {display:inline-flex;align-items:center;justify-content:center;min-width:24px;min-height:28px;border:0;background:transparent;color:var(--u6-ink,#51452f);font:inherit;cursor:pointer;border-radius:4px}
.editor-layer.ws[data-ed-demo] .ws .ed-composer [data-wf-ref-left]:hover {background:var(--chip-bg,#eee5d0)}
.editor-layer.ws[data-ed-demo] .ws .ed-composer [data-wf-ref-left]:focus-visible {outline:2px solid var(--accent,#785b1e);outline-offset:-2px}
.editor-layer.ws[data-ed-demo] .ws .ed-composer [data-wf-ref-left]:disabled {opacity:.4;cursor:default}
.editor-layer.ws[data-ed-demo] .ws .ed-composer [data-wf-ref-remove] {min-width:24px;min-height:28px}
.editor-layer.ws[data-ed-demo] .ws .ed-composer [data-wf-ref-add] {display:none}
.editor-layer.ws[data-ed-demo] .ws .ed-ai-input small {display:none}
.editor-layer.ws[data-ed-demo] .ws .ed-ai-input {font-size:11px;margin:5px 0}
.editor-layer.ws[data-ed-demo] .ws .ed-wf-panel {gap:4px}
.editor-layer.ws[data-ed-demo] .ws .ed-wf-dicon {flex:0 0 32px}
.editor-layer.ws[data-ed-demo] .ws .ed-wf-catrow {margin:0;min-height:0}
.editor-layer.ws[data-ed-demo] .ws .ed-wf-chip {min-height:24px;padding:3px 4px}
.editor-layer.ws[data-ed-demo] .ws .ed-wf-chips {min-height:24px}
.editor-layer.ws[data-ed-demo] .ws .ed-wf-guide[aria-hidden=true] {display:none}
.editor-layer.ws[data-ed-demo] .ws .ed-template-actions button {border:0;background:transparent;color:var(--u6-ink,#51452f);font:inherit;cursor:pointer;padding:3px 5px;border-radius:4px}
.editor-layer.ws[data-ed-demo] .ws .ed-template-actions button:hover {background:var(--chip-bg,#eee5d0)}
.recipe-single-config {font-size:11px}
.recipe-single-config[open] {max-height:160px;overflow:auto}
@media(max-height:820px){
 .editor-layer.ws[data-ed-demo] .ws .ed-wf-tiles {grid-auto-rows:64px}
 .editor-layer.ws[data-ed-demo] .ws .ed-wf-tile img {height:38px}
 .editor-layer.ws[data-ed-demo] .ws .ed-wf-body {min-height:200px;max-height:200px}
 .editor-layer.ws[data-ed-demo] .ws .ed-wf-foot {padding-top:3px;gap:2px}
 .recipe-batch p {margin:3px 0;font-size:11px}
 /* B-R445 短屏尾段预算：.ed-wf-body 高度由冻器断言锁死（200px），故溢出只能由尾段自身吸收——
    逐图批量块让出空间并自立滚动，配置行保持整块可见，使配置入口在 1440×780 不再落到面板盒外/被发送坞盖住。 */
 .editor-layer.ws[data-ed-demo] .ws .ed-wf-foot {flex:0 1 auto;min-height:0}
 .editor-layer.ws[data-ed-demo] .ws .recipe-single-config {flex:0 0 auto}
 .editor-layer.ws[data-ed-demo] .ws .recipe-batch {flex:1 1 auto;min-height:0;overflow-y:auto}
}
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tplbar {padding:0;border:0;border-radius:0}

/* ===== C-OUTPAINT-HIT-R1（task_6c5f430f80bb / ctx_1128059596c8）：扩图「次级精调：单边百分比」带指针可达修复 ===== */
/* 根因（diag 实测）：① refinement.css:4964 分组规则把 .ed-toolopts 变 4 等列 grid，336px 容器 → 129px 原生 range 溢出列格两两重叠 ~61px（中心距 68px），点按落到邻杆；② closed <details> 内容逃逸渲染，滑杆带悬于面板尾（r125 B 票形态=遮 P.ed-wf-sub 指导段）。inline U19-R1 的 .ed-pad-panel{flex-direction:column} 在 grid 下失效（flex 属性对 grid 容器无效）。 */
/* 修=仅 .ed-op-adv 内 .ed-pad-panel 域：closed 显式镜像 UA 隐藏合同；open 恢复 U19-R1 纵向单列本意（display:flex 才让 flex-direction 生效）+ 每杆标签列式满宽。不触 .ed-draw-properties / 其他 .ed-toolopts 工具栏 / 其他 details；执行/历史/归档/中键/桥接零动。 */
.editor-layer.ws[data-ed-demo] .ws .ed-op-adv:not([open]) > .ed-toolopts.ed-pad-panel { display: none; }
.editor-layer.ws[data-ed-demo] .ws .ed-op-adv[open] > .ed-toolopts.ed-pad-panel { display: flex; flex-direction: column; align-items: stretch; }
.editor-layer.ws[data-ed-demo] .ws .ed-pad-panel .ed-horizontal-value { display: flex; flex-direction: column; align-items: stretch; gap: 2px; }
.editor-layer.ws[data-ed-demo] .ws .ed-pad-panel input[type="range"] { width: 100%; min-width: 0; }

/* User U05: template columns follow the available panel width. */
.editor-layer.ws[data-ed-demo] .ws .ed-wf-tiles {
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 104px), 1fr));
}
