/* 974 结构图 /tool/diagram/ */
.dg{display:grid;grid-template-columns:226px minmax(0,1fr);gap:16px;align-items:start}
.dg>*{min-width:0}

/* ---------- 左侧悬浮工具栏 ---------- */
.dg-rail{position:sticky;top:76px;background:#fff;border:1px solid var(--line);border-radius:14px;
  padding:12px;box-shadow:var(--sh);max-height:calc(100vh - 96px);overflow:auto;z-index:5}
.dg-rail-h{font-size:11px;font-weight:700;letter-spacing:.14em;color:var(--ink-3);margin:2px 0 8px 4px;text-transform:uppercase}
.dg-rail-h:not(:first-child){margin-top:16px}
.dg-types{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}
.dg-type{display:flex;flex-direction:column;align-items:center;gap:4px;padding:9px 2px;border:1px solid var(--line);
  border-radius:10px;background:#fff;cursor:pointer;font:11.5px/1.2 var(--sans);color:var(--ink-2);font-family:inherit}
.dg-type i{font-size:16px;font-style:normal;line-height:1}
.dg-type:hover{border-color:var(--line-2);background:#FCFAF6}
.dg-type.on{border-color:var(--brand);background:#EEF4F1;color:var(--brand-d);font-weight:700;
  box-shadow:0 0 0 3px rgba(18,85,74,.08)}
.dg-tpls{display:flex;flex-direction:column;gap:8px}
.dg-tpl{display:block;padding:0;border:1px solid var(--line);border-radius:11px;background:#fff;cursor:pointer;
  overflow:hidden;text-align:left;font-family:inherit;transition:.16s}
.dg-tpl:hover{border-color:var(--line-2);box-shadow:0 4px 12px rgba(15,23,42,.07)}
.dg-tpl.on{border-color:var(--brand);box-shadow:0 0 0 3px rgba(18,85,74,.10)}
.dg-th{display:block;background:#fff;border-bottom:1px solid var(--line);line-height:0}
.dg-th svg{display:block;width:100%;height:auto}
.dg-tn{display:block;padding:6px 9px;font-size:12.5px;color:var(--ink-2)}
.dg-tpl.on .dg-tn{color:var(--brand-d);font-weight:700}

/* ---------- 右侧主区 ---------- */
.dg-main{display:flex;flex-direction:column;gap:10px}
.dg-bar{display:flex;flex-wrap:wrap;align-items:center;gap:7px;background:#fff;border:1px solid var(--line);
  border-radius:12px;padding:8px 10px;box-shadow:var(--sh)}
.dg-title{display:flex;flex-direction:column;line-height:1.25;margin-right:2px;min-width:96px}
.dg-title b{font-size:13.5px;color:var(--ink)}
.dg-title em{font-size:10.5px;font-style:normal;color:var(--ink-3)}
.dg-sep{flex:0 0 1px;height:22px;background:var(--line-2);margin:0 2px}
.dg-grp{display:inline-flex;gap:2px;background:#F7F9FC;border:1px solid var(--line);border-radius:9px;padding:2px}
.dg-grp button{border:0;background:transparent;width:26px;height:24px;border-radius:7px;cursor:pointer;
  color:#5A6B85;font-size:13px;line-height:1;font-family:inherit}
.dg-grp button:hover{background:#fff;color:var(--brand);box-shadow:0 1px 3px rgba(15,23,42,.10)}
.dg-tog{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:var(--ink-2);cursor:pointer;user-select:none}
.dg-tog input{accent-color:var(--brand);margin:0}
.dg-ths{display:inline-flex;gap:4px}
.dg-ths-b{display:inline-flex;gap:0;padding:3px;border:1px solid var(--line);border-radius:8px;background:#fff;cursor:pointer}
.dg-ths-b i{width:8px;height:16px;display:block}
.dg-ths-b i:first-child{border-radius:2px 0 0 2px}
.dg-ths-b i:last-child{border-radius:0 2px 2px 0}
.dg-ths-b.on{border-color:var(--brand);box-shadow:0 0 0 2px rgba(18,85,74,.12)}
.dg-zoom{display:inline-flex;gap:2px}
.dg-zoom button{border:1px solid var(--line);background:#fff;border-radius:7px;min-width:26px;height:24px;
  font-size:12px;cursor:pointer;color:#5A6B85;font-family:inherit}
.dg-zoom button:hover{border-color:var(--brand);color:var(--brand)}
.dg-btn{border:1px solid var(--line-2);background:#fff;border-radius:8px;padding:6px 11px;font:12.5px/1 var(--sans);
  color:var(--ink-2);cursor:pointer;font-family:inherit}
.dg-btn:hover{border-color:var(--brand);color:var(--brand)}
.dg-btn.pri{background:var(--brand);border-color:var(--brand);color:#fff}
.dg-btn.pri:hover{filter:brightness(1.08);color:#fff}
.dg-scale{border:1px solid var(--line-2);border-radius:8px;padding:5px 4px;font:12px var(--sans);color:var(--ink-2);
  background:#fff;font-family:inherit}

.dg-stage{background:#fff;border:1px solid var(--line);border-radius:14px;padding:14px;box-shadow:var(--sh);
  min-height:420px;display:flex;align-items:center;justify-content:center;overflow:auto;
  background-image:radial-gradient(#e8eef7 1px,transparent 1px);background-size:16px 16px;background-position:0 0}
.dg-stage>svg{display:block;border-radius:10px;background:#fff;box-shadow:0 6px 22px rgba(15,23,42,.07);touch-action:none}
.dg-empty{color:var(--ink-3);font-size:13px}
.dg-foot{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;font-size:11.5px;color:var(--ink-3);padding:0 4px}
.dg-foot b{color:var(--ink-2)}

/* ---------- SVG 内交互元素 ---------- */
.dg-svg .dg-drag{cursor:grab}
.dg-svg .dg-drag:hover .dg-card{stroke-opacity:.6}
.dg-svg .dg-b.on .dg-selbox{fill:rgba(37,99,235,.05);stroke:#2563eb;stroke-width:1.4;stroke-dasharray:4 3}
.dg-svg .dg-txt{cursor:text}
.dg-svg .dg-marq{fill:rgba(37,99,235,.07);stroke:#2563eb;stroke-width:1;stroke-dasharray:4 3}
.dg-link{stroke-dasharray:100;stroke-dashoffset:100;animation:dgDraw .8s cubic-bezier(.22,1,.36,1) both}
.dg-b{animation:dgFade .5s cubic-bezier(.22,1,.36,1) both}
@keyframes dgDraw{to{stroke-dashoffset:0}}
@keyframes dgFade{from{opacity:0}to{opacity:1}}

/* ---------- 内联编辑框 ---------- */
.dg-edit{position:fixed;z-index:99999;border:2px solid #2563eb;border-radius:7px;background:#fff;
  padding:0 8px;font:13px var(--sans);color:var(--ink);outline:none;box-shadow:0 8px 24px rgba(15,23,42,.18)}

/* ---------- 提示 ---------- */
.dg-toast{position:fixed;left:50%;bottom:34px;transform:translate(-50%,14px);background:#0f172a;color:#fff;
  font-size:12.5px;padding:9px 16px;border-radius:999px;opacity:0;pointer-events:none;transition:.25s;z-index:99998;
  box-shadow:0 10px 30px rgba(15,23,42,.3)}
.dg-toast.on{opacity:1;transform:translate(-50%,0)}

@media (max-width:900px){
  .dg{grid-template-columns:minmax(0,1fr)}
  .dg-rail{position:static;max-height:none}
  .dg-types{grid-template-columns:repeat(3,1fr)}
  .dg-tpls{flex-direction:row;overflow:auto;padding-bottom:4px}
  .dg-tpl{flex:0 0 132px}
  .dg-title{min-width:0}
  .dg-bar{gap:5px}
  .dg-foot span:last-child{display:none}
}

/* v2：覆盖层（选中框/把手/区间带）与命中区 */
.dg-svg .dg-hit{pointer-events:all}
.dg-svg .dg-b{cursor:move}
.dg-svg .dg-b .dg-handle,.dg-svg .dg-handle{cursor:ew-resize}
.dg-svg .dg-selbox{fill:rgba(37,99,235,.05);stroke:#2563eb;stroke-width:1.4;stroke-dasharray:4 3;pointer-events:none}
.dg-svg .dg-handle{fill:#fff;stroke:#2563eb;stroke-width:2}
.dg-svg .dg-axisband{fill:rgba(37,99,235,.13);stroke:#2563eb;stroke-width:1;stroke-dasharray:4 3;pointer-events:none}
.dg-svg .dg-marq{fill:rgba(37,99,235,.07);stroke:#2563eb;stroke-width:1;stroke-dasharray:4 3;pointer-events:none}
.dg-svg{cursor:default}

/* ================= v3：工具条 / 属性面板 / 注记 / 分享 ================= */
.dg-tools{display:inline-flex;gap:3px;background:#F7F9FC;border:1px solid var(--line);border-radius:9px;padding:3px}
.dg-tool{display:inline-flex;align-items:center;gap:4px;border:0;background:transparent;border-radius:7px;
  padding:4px 7px;cursor:pointer;color:#5A6B85;font:11.5px var(--sans);font-family:inherit;line-height:1}
.dg-tool i{font-style:normal;font-size:13px;line-height:1}
.dg-tool:hover{background:#fff;color:var(--brand);box-shadow:0 1px 3px rgba(15,23,42,.10)}
.dg-tool.on{background:var(--brand);color:#fff}
.dg-tool.on:hover{color:#fff}
.dg-svg.dg-cross{cursor:crosshair}
.dg-btn.share{background:#EEF4F1;border-color:#CFE0D9;color:var(--brand-d);font-weight:700}
.dg-btn.share:hover{background:#E2EEEA;color:var(--brand-d)}

/* 悬停日期 */
.dg-hov{position:fixed;z-index:99997;pointer-events:none;background:#0f172a;color:#fff;font-size:11.5px;
  padding:4px 9px;border-radius:6px;opacity:0;transition:opacity .12s;white-space:nowrap;
  box-shadow:0 6px 18px rgba(15,23,42,.24)}
.dg-hov.on{opacity:1}

/* 属性面板 */
.dg-props{display:none;position:absolute;right:16px;top:64px;width:214px;z-index:60;background:#fff;
  border:1px solid var(--line-2);border-radius:12px;box-shadow:0 16px 44px rgba(15,23,42,.16);padding:10px 11px 11px}
.dg-props.on{display:block}
.dg-main{position:relative}
.dg-ph{display:flex;align-items:center;justify-content:space-between;gap:6px;padding-bottom:7px;
  margin-bottom:7px;border-bottom:1px solid var(--line)}
.dg-ph b{font-size:12.5px;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dg-px{border:0;background:transparent;cursor:pointer;color:var(--ink-3);font-size:12px;padding:2px 4px;border-radius:5px}
.dg-px:hover{background:#F2F5FA;color:var(--ink)}
.dg-prow{display:flex;align-items:center;gap:6px;margin:6px 0;font-size:11.5px;color:var(--ink-2)}
.dg-prow>label{flex:0 0 34px;color:var(--ink-3)}
.dg-prow input[type=color]{width:30px;height:22px;padding:0;border:1px solid var(--line-2);border-radius:5px;background:#fff;cursor:pointer}
.dg-prow input[type=range]{flex:1;min-width:0;accent-color:var(--brand);height:16px}
.dg-prow input[type=text],.dg-prow input[type=number]{flex:1;min-width:0;border:1px solid var(--line-2);border-radius:6px;
  padding:4px 6px;font:11.5px var(--sans);font-family:inherit;color:var(--ink)}
.dg-prow select{flex:1;min-width:0;border:1px solid var(--line-2);border-radius:6px;padding:4px 4px;font:11.5px var(--sans);font-family:inherit}
.dg-prow em{font-style:normal;color:var(--ink-3);font-size:10.5px;min-width:26px;text-align:right}
.dg-pclear{border:1px solid var(--line);background:#fff;border-radius:5px;font-size:10px;color:var(--ink-3);
  padding:2px 5px;cursor:pointer;font-family:inherit}
.dg-pclear:hover{border-color:var(--brand);color:var(--brand)}
.dg-prowq{gap:8px;flex-wrap:wrap}
.dg-pq{width:22px;height:22px;border-radius:6px;border:1px solid var(--line-2);cursor:pointer;padding:0;
  box-shadow:0 1px 2px rgba(15,23,42,.06);transition:transform .12s}
.dg-pq:hover{transform:translateY(-1px);border-color:var(--brand)}
.dg-psep{margin:9px 0 3px;font-size:10px;letter-spacing:.12em;color:var(--ink-3);border-top:1px dashed var(--line-2);padding-top:8px}
.dg-pstruct{flex-wrap:wrap;gap:5px}
.dg-pb{border:1px solid var(--line-2);background:#fff;border-radius:6px;font-size:11px;color:var(--ink-2);
  padding:4px 7px;cursor:pointer;font-family:inherit}
.dg-pb:hover{border-color:var(--brand);color:var(--brand)}
.dg-pdel{border:1px solid #F3D0D0;background:#FEF4F4;border-radius:6px;font-size:11px;color:#B42318;
  padding:4px 8px;cursor:pointer;font-family:inherit;width:100%}
.dg-pdel:hover{background:#FCE8E8}
.dg-pfoot{margin-top:9px}

/* 注记选中 */
.dg-svg .dg-note{cursor:move}
.dg-svg .dg-nselbox{fill:rgba(37,99,235,.04);stroke:#2563eb;stroke-width:1.2;stroke-dasharray:4 3;pointer-events:none}
.dg-svg .dg-hnw{cursor:nwse-resize}
.dg-svg .dg-hms{cursor:ew-resize}
.dg-svg .dg-vwh{cursor:ew-resize;fill:rgba(37,99,235,.14);stroke:#2563eb;stroke-width:1.2}
.dg-svg .dg-mkband{fill:rgba(37,99,235,.10);stroke:#2563eb;stroke-width:1;stroke-dasharray:4 3;pointer-events:none}
.dg-edit-ta{position:fixed;z-index:99999;border:2px solid #2563eb;border-radius:8px;background:#fff;padding:7px 9px;
  font:12.5px/1.6 var(--sans);color:var(--ink);outline:none;resize:none;box-shadow:0 8px 24px rgba(15,23,42,.18)}

/* 分享弹层 */
.dg-share{display:none;position:fixed;inset:0;z-index:99996;background:rgba(15,23,42,.36);
  align-items:center;justify-content:center;padding:20px}
.dg-share.on{display:flex}
.dg-shbox{background:#fff;border-radius:16px;padding:20px 20px 16px;width:min(520px,100%);
  box-shadow:0 24px 70px rgba(15,23,42,.32)}
.dg-shbox b{display:block;font-size:14.5px;color:var(--ink);margin-bottom:10px}
.dg-shbox input{width:100%;border:1px solid var(--line-2);border-radius:8px;padding:8px 10px;
  font:12.5px var(--sans);font-family:inherit;color:var(--ink);background:#F7F9FC}
.dg-shact{display:flex;gap:8px;margin-top:11px;flex-wrap:wrap}
.dg-shact .dg-btn{text-decoration:none;display:inline-flex;align-items:center}
.dg-shbox small{display:block;margin-top:10px;font-size:11px;color:var(--ink-3);line-height:1.6}

/* 版式数量角标 */
.dg-type span{display:flex;align-items:center;gap:3px}
.dg-type em{font-style:normal;font-size:9.5px;color:var(--ink-3);background:#F2F5FA;border-radius:999px;padding:0 4px}
.dg-type.on em{color:var(--brand);background:#E3EFEA}
