/* v401：子画布 = 真·无限画布 —— 打开时把主画布**整层借过来用**
   （75-sub-canvas401.js 把 state.items 换成子条目一个、view 换成子视野），
   所以这里只有两件事：
     ① 藏掉主画布的周边 UI（顶栏 / 缩放胶囊 / 小地图 / 图层面板 / 底部 dock）；
     ② 给「窗口」描一圈边 + 一条顶栏（标题 + 关闭键）。
   ⚠️ 没有遮罩层：画布本身就是子画布的画布，**节点 / 连线 / 空白**都要能直接点到，
     所以整层 pointer-events:none，只有关闭键那一颗收回点击。
   ⚠️ z-index 只给 20（低于 .sheet 的 32）—— 参数面板 / 新建节点窗 / 提示全都自动在它上面。

   v404：窗口尺寸回到 v393 / v398 那扇「窗口」（用户报「子画布窗口怎么变成全屏了，
   保持之前的尺寸，尺寸不要变」）—— v401 曾把边框铺到整个视口（16px 四边留白）= 看着全屏。
   现在窗口恒 **16:9**、双上限 **94vw / 92vh**（数值与旧 `.modal.entc-win351` 完全一致，
   `(92vh - 104px) * 16 / 9` 里的 104 = 旧窗的头 + 上下留白），居中摆放；
   窗口之外的主画布整层 `clip-path` 裁掉（**同时裁掉命中区** ⇒ 窗外的节点既看不见也点不到）。 */
body.sub401-on .topbar,
body.sub401-on .zoom-pill,
body.sub401-on .zoom-pop,
body.sub401-on .mini-map,
body.sub401-on .layers,
body.sub401-on .layers-tab,
body.sub401-on .dock:not(#sliceDock),   /* v423：全站 .dock 类只有 #sliceDock —— 这条本意藏主底栏，实际只误伤切割面板底部（识别行 / 宫格切割 / 打包下载），排除它 */
body.sub401-on #mapBar,
body.sub401-on .aifab397{display:none!important}

.sub401{position:fixed;inset:0;z-index:20;pointer-events:none}
.sub401[hidden]{display:none}
/* v404：同一选择器的**补充规则**（上一行被闸门钉死、一字不动）——
   把它变成居中容器：窗口 + 标题栏同宽同轴（column-reverse：DOM 里 frame 在前，
   视觉上标题栏在上） */
body.sub401-on{--sub401w:min(calc(94vw - 44px),calc((92vh - 104px) * 16 / 9))}
.sub401{display:flex;flex-direction:column-reverse;align-items:center;justify-content:center;gap:8px}

.sub401-frame{position:relative;width:var(--sub401w);height:auto;aspect-ratio:16/9;
  border:1px solid var(--line);border-radius:16px;
  box-shadow:0 18px 60px rgba(8,10,18,.16);pointer-events:none}

.sub401-bar{position:relative;width:var(--sub401w);height:32px;
  display:flex;align-items:center;gap:10px;pointer-events:none}
.sub401-title{font-size:13px;font-weight:600;color:var(--text-2)}
.sub401-hint{font-size:11.5px;color:var(--text-3);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sub401-x{margin-left:auto;pointer-events:auto;width:26px;height:26px;flex:0 0 26px;
  border-radius:8px;border:1px solid var(--line);background:var(--card);color:var(--text-2);
  font:inherit;font-size:12px;line-height:1;cursor:pointer;transition:.15s}
.sub401-x:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}

/* v404：窗口之外不再露主画布（也不可点）—— 画布整层按窗口矩形裁剪；
   inset 的四条边都用「50% − 窗口半宽/半高」算出来，与 .sub401 的居中口径同一份数值。 */
body.sub401-on #canvasWrap{clip-path:inset(calc(50% - var(--sub401w) * 9 / 16 / 2) calc(50% - var(--sub401w) / 2) calc(50% - var(--sub401w) * 9 / 16 / 2) calc(50% - var(--sub401w) / 2) round 16px)}

/* ================= v421：参数面板在子画布里不许高过窗口内框 =================
   v404 的 clip-path 会把出框部分裁掉 —— 用户报「切割功能显示不完全」；
   layoutNodeUI 已把面板位置整个夹进 frame（18-sheet-ui.js v421 段），这里给面板本身限高兜底。 */
body.sub401-on .sheet{max-height:calc(var(--sub401w) * 9 / 16 - 20px)}

/* v423：切割面板底部 dock（#sliceDock）恢复显示后整块更高 —— max-height 之下允许滚动兜底，
   不再静默裁掉下半段（.sheet 默认 overflow:hidden 会吞内容）。 */
body.sub401-on .sheet{overflow-y:auto}
