
    /* 编辑器模式：画布撑满整个内容区域 */
    .content-inner.puzzle-active { max-width: none; margin: 0; }
    /* 拼图页全屏（V6.74）：.content 三边 24px 留白一次消除，列表页/编辑器都贴导航栏贴左右 */
    .content.puzzle-active { padding: 0; }
    /* 薄弱分析全铺（V9.20.1）：与拼图页同款，去 .content 三边 24px 留白 + .content-inner 1120px 限宽；
       看板宽度由 flex 跟随侧边栏展开/收起自适应，不钉死像素（review.js 按 weak 子页切换本类） */
    .content.weak-active { padding: 0; }
    .content-inner.weak-active { max-width: none; margin: 0; }
    /* 章节列表可能很长，覆盖 .tab-page 的居中 + 顶部留白 + 文字居中 */
    #puzzlePage { justify-content: flex-start; padding: 0; text-align: left; }
    #puzzlePage.puzzle-editor-mode { padding: 0; justify-content: flex-start; overflow: hidden; }

    /* 章节列表 */
    .puzzle-chapter-list { display: flex; flex-direction: column; gap: 10px; width: 100%; max-width: 680px; margin: 0 auto; padding: 24px; }
    /* 科目无知识池空态（V9.19.1：不再回退无关 mock，给引导提示） */
    .puzzle-empty { text-align: center; color: var(--on-surface-variant); padding: 72px 24px; }
    .puzzle-empty-title { font-size: 15px; font-weight: 600; margin-bottom: 10px; }
    .puzzle-empty-hint { font-size: 13px; color: var(--outline); line-height: 1.7; }
    /* 章节完成徽章（拼图全对后显示在箭头前） */
    .puzzle-chapter-done { font-size: 16px; flex-shrink: 0; }
    /* 下一级按钮未解锁/无级可解锁时置灰 */
    .pz-tool-btn:disabled { opacity: 0.45; cursor: not-allowed; }
    /* 查看完整拼图为只读模式：节点不显示抓取手型 */
    #puzzlePage.pz-mode-full .pz-node { cursor: default; }
    .puzzle-chapter-item {
      display: flex; align-items: center; gap: 16px; padding: 18px 20px; border-radius: 14px;
      border: 1.5px solid var(--border); background: var(--white);
      cursor: pointer; transition: all 0.2s ease;
    }
    .puzzle-chapter-item:hover { border-color: var(--primary); background: var(--alpha-03); }
    .puzzle-chapter-num {
      width: 40px; height: 40px; border-radius: 12px; flex-shrink: 0;
      background: var(--alpha-08); color: var(--primary);
      display: flex; align-items: center; justify-content: center;
      font-size: 18px; font-weight: 700;
    }
    .puzzle-chapter-info { flex: 1; min-width: 0; }
    .puzzle-chapter-name { font-size: 15px; font-weight: 600; color: var(--on-surface); margin-bottom: 2px; }
    .puzzle-chapter-meta { font-size: 13px; color: var(--on-surface-variant); }
    .puzzle-chapter-arrow { color: var(--outline); flex-shrink: 0; }

    /* 编辑器顶栏 */
    .puzzle-editor { display: flex; flex-direction: column; height: 100%; width: 100%; }
    .puzzle-editor-topbar {
      display: flex; align-items: center; gap: 12px; padding: 10px 20px;
      border-bottom: 1px solid var(--border); flex-shrink: 0;
      background: var(--white);
    }
    .pz-back-btn {
      display: inline-flex; align-items: center; gap: 4px; padding: 6px 12px;
      border-radius: 8px; border: none; background: transparent;
      cursor: pointer; font-family: inherit; font-size: 13px;
      color: var(--on-surface-variant); transition: all 0.15s;
    }
    .pz-back-btn:hover { background: var(--hover-bg); color: var(--on-surface); }
    .pz-title { font-size: 15px; font-weight: 600; color: var(--on-surface); flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
    .pz-tools { display: flex; align-items: center; gap: 6px; flex-shrink: 0; }
    .pz-tool-btn {
      display: inline-flex; align-items: center; gap: 4px; padding: 6px 10px;
      border-radius: 8px; border: 1px solid var(--border); background: var(--white);
      cursor: pointer; font-family: inherit; font-size: 12px;
      color: var(--on-surface-variant); transition: all 0.15s; white-space: nowrap;
    }
    .pz-tool-btn:hover { background: var(--hover-bg); }
    .pz-tool-btn.active { background: var(--primary-container); color: var(--primary-soft); border-color: var(--primary); }
    .pz-zoom-label { font-size: 12px; color: var(--on-surface-variant); min-width: 38px; text-align: center; font-variant-numeric: tabular-nums; }

    /* 画布容器 */
    .puzzle-canvas-wrap {
      flex: 1; position: relative; overflow: hidden;
      background-color: #fafbfc;
      background-image: radial-gradient(circle, #e0dce8 1px, transparent 1px);
      background-size: 24px 24px;
      cursor: grab;
    }
    .puzzle-canvas-wrap:active { cursor: grabbing; }
    .puzzle-canvas-wrap.dragging-node { cursor: grabbing; }

    /* SVG 连线层 */
    .puzzle-svg {
      position: absolute; top: 0; left: 0; width: 100%; height: 100%;
      pointer-events: none; z-index: 1; overflow: visible;
    }
    .puzzle-svg path { fill: none; stroke-width: 2; }
    .puzzle-svg path.line-curve { stroke: #c4b5e0; }
    .puzzle-svg path.line-straight { stroke: #c4b5e0; }
    .puzzle-svg path.line-preview { stroke: var(--primary); stroke-dasharray: 6 4; opacity: 0.7; }

    /* 节点层 */
    .puzzle-node-layer {
      position: absolute; top: 0; left: 0;
      width: 100%; height: 100%;
      transform-origin: 0 0; z-index: 2;
    }

    /* 节点卡片 */
    .pz-node {
      position: absolute; display: flex; align-items: center; gap: 6px;
      padding: 8px 14px; border-radius: 10px; font-size: 13px;
      white-space: nowrap; cursor: grab; user-select: none;
      transition: box-shadow 0.15s, border-color 0.15s;
      box-sizing: border-box;
    }
    .pz-node:active { cursor: grabbing; }
    .pz-node.chapter {
      background: var(--primary-container); border: 2px solid var(--primary);
      font-weight: 700; font-size: 15px; color: var(--primary);
      padding: 10px 18px; border-radius: 12px;
    }
    .pz-node.section {
      background: var(--alpha-04); border: 2px solid var(--alpha-30);
      font-weight: 600; color: var(--on-surface);
    }
    .pz-node.knowledge {
      background: var(--white); border: 1.5px solid var(--border);
      color: var(--on-surface);
    }
    .pz-node.snap-target {
      box-shadow: 0 0 0 5px var(--alpha-25);
      border-color: var(--primary) !important;
    }
    .pz-node.dragging { opacity: 0.4; }
    .pz-node-icon { font-size: 14px; flex-shrink: 0; }

    /* 拖拽幽灵 */
    .pz-drag-ghost {
      position: fixed; pointer-events: none; z-index: 9999;
      padding: 8px 14px; border-radius: 10px;
      background: var(--primary-container); border: 2px solid var(--primary);
      font-size: 13px; color: var(--primary); font-weight: 600;
      box-shadow: 0 4px 20px var(--alpha-30);
      transform: translate(-50%, -50%); opacity: 0.92;
      white-space: nowrap;
    }

    /* 未归位节点 — 散落在画布上，虚线边框以示区别 */
    .pz-node.unplaced {
      border-style: dashed;
      opacity: 0.78;
    }
    .pz-node.unplaced:hover {
      opacity: 1;
      border-color: var(--primary);
      box-shadow: 0 2px 12px var(--alpha-18);
    }

    /* 右键菜单 */
    .pz-context-menu {
      position: fixed; z-index: 10000; min-width: 140px;
      padding: 4px; border-radius: 10px; background: var(--white);
      box-shadow: 0 4px 20px rgba(0,0,0,0.15); border: 1px solid var(--border);
    }
    .pz-context-menu-item {
      display: flex; align-items: center; gap: 8px;
      padding: 8px 12px; border-radius: 6px; border: none; background: transparent;
      cursor: pointer; font-family: inherit; font-size: 13px; color: var(--on-surface);
      width: 100%; text-align: left; transition: background 0.1s;
    }
    .pz-context-menu-item:hover { background: var(--hover-bg); }
    .pz-context-menu-item.danger { color: var(--error); }

