  /* ---------- 全屏画布 ---------- */
  .canvas-wrap{
    position:absolute;inset:0;overflow:hidden;touch-action:none;
    background-color:var(--canvas);
    /* 点阵不再是 CSS 背景：改由 drawStage() 画进 #stage 画布本身（见 drawDots），
       跟节点同一次绘制、同一套 view 变换 —— 拖动时必然同步，不再依赖浏览器的背景重绘 */
  }
  .canvas-wrap canvas{display:block;width:100%;height:100%}
  .canvas-wrap.tool-pan{cursor:grab}
  .canvas-wrap.panning{cursor:grabbing}
  .canvas-wrap.tool-select{cursor:default}
  .canvas-wrap.tool-magic{cursor:crosshair}
  .canvas-wrap.over-handle{cursor:nwse-resize}
  .canvas-wrap.over-node{cursor:move}
  .canvas-wrap.over-plus{cursor:pointer}
  .canvas-wrap.over-link{cursor:pointer}
  .canvas-wrap.over-vid330{cursor:pointer}   /* v330：悬浮在视频节点的播放键 / 进度条上 → 手型（排在 .over-node 之后，优先级够） */
  /* v152：悬浮在标题栏右端那颗「显示口径」键上 → 手型（排在 .over-node 之后，优先级够） */
  .canvas-wrap.marquee{cursor:crosshair}
  .canvas-empty{
    position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;
    gap:8px;color:var(--text-3);pointer-events:none;text-align:center;padding:20px;
  }
  .canvas-empty strong{font-size:16px;color:var(--text-2);font-weight:600}
  .canvas-empty span{font-size:12.5px}
  .canvas-empty .dim{font-size:11.5px;opacity:.8}
  .canvas-empty[hidden]{display:none}
  /* v561：空态只留一句主文案 ⇒ 大图标与那颗选图按钮的样式一并撤掉（两个元素都已从
     index.html 删除）。整层继续穿透给画布 —— 见上面 .canvas-empty 的 pointer-events:none：
     拖动画布 / 拖文件进画布的手势都不受影响。 */
  .canvas-wrap.empty{cursor:grab}
  .canvas-wrap.empty.panning{cursor:grabbing}

  /* v116：底部悬浮工具栏已撤，工具按钮住进 dock-head —— .tool 样式保留给切割功能区用
     v294：与顶栏模式切换（像素/切割/调色）完全同款（用户口径「下面的选择样式统一和上面一样」） */
  .tool{
    font:inherit;font-size:11.5px;font-weight:600;cursor:pointer;transition:.15s;
    display:inline-flex;align-items:center;gap:5px;padding:5px 10px;border-radius:8px;
    border:1px solid var(--line);background:#fafbfd;color:var(--text-2);line-height:1;white-space:nowrap;
  }
  .tool:hover{border-color:var(--accent);color:var(--accent)}
  .tool.on{
    border-color:var(--accent);color:#fff;
    background:linear-gradient(135deg,var(--accent),var(--accent-2));
  }

  /* 迭代 71：缩放胶囊挪到左下角（右下角让给图层面板） */
  .zoom-pill{
    position:absolute;left:14px;bottom:14px;z-index:47;
    display:flex;align-items:center;gap:4px;
    background:rgba(255,255,255,.97);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);
    border:1px solid var(--line);border-radius:11px;padding:4px 6px;box-shadow:var(--shadow);
  }
  .zoom-pill[hidden]{display:none}
  /* v133：胶囊里是「回中键（正方形）+ 连线开关 + 百分比」
     v140：配色反过来 —— 胶囊底板改成白色，三个方键走**画布底色**（和画布同色，
     视觉上像从画布上抠下来贴在白框里），不再需要那层投影把白方块顶出来。 */
  .zoom-pill .zoom-sq{
    width:24px;height:24px;padding:0;display:grid;place-items:center;flex:none;
    font-size:12px;line-height:1;border:1px solid var(--line);border-radius:7px;
    background:var(--sunken);color:var(--text);cursor:pointer;transition:.15s;
  }
  .zoom-pill .zoom-sq:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}
  /* v139：胶囊里三个功能键统一成**正方形图标**（不带文字）—— 从左到右：小地图 / 隐藏连线 / 回中。
     按压态（aria-pressed="true"）走强调底；[hidden] 必须自己写一条盖住 .zoom-sq 的 display:grid
     （地图页没有连线时那个键要让位）。 */
  .zoom-pill .zoom-sq svg{width:13px;height:13px;display:block}
  .zoom-pill .zoom-sq[aria-pressed="true"]{background:var(--accent);border-color:var(--accent);color:#0b0d12;box-shadow:none}
  .zoom-pill .zoom-sq[hidden]{display:none}
  /* ---------- v137：小地图（左下角缩放胶囊上方；只读导航，不吃主画布事件） ---------- */
  .mini-map{
    position:absolute;left:14px;bottom:58px;z-index:47;
    width:190px;height:132px;border-radius:10px;overflow:hidden;
    /* v141：白色主题 —— 与全站浮窗（白底 + --line 边框 + shadow）同族 */
    background:rgba(255,255,255,.97);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);
    border:1px solid var(--line);box-shadow:var(--shadow);
  }
  .mini-map[hidden]{display:none}
  .mini-map canvas{position:absolute;left:0;top:0;width:100%;height:100%;display:block;cursor:crosshair;touch-action:none}
  .mini-close{
    position:absolute;top:4px;right:4px;z-index:2;
    width:18px;height:18px;padding:0;display:grid;place-items:center;
    font-size:10px;line-height:1;border:none;border-radius:6px;
    background:rgba(20,24,40,.07);color:var(--text-2);cursor:pointer;transition:.15s;
  }
  .mini-close:hover{background:rgba(20,24,40,.16);color:var(--text)}

  /* v456：空态主文案后面那颗「Q 版像素鼠标」图标 —— 像素风（16 网格、直角端点、crispEdges 硬边），
     跟正文同一行；颜色走主题 accent（不发明一次性颜色）。 */
  .canvas-empty .ce-mouse{
    width:20px;height:20px;margin-left:6px;vertical-align:-4px;
    color:var(--accent);opacity:.9;
  }
