/*
 * 模块价值：组织三核心页面与独立画布；Copilot 默认读规范业务段落，原话和详情按需出现。
 * 职责：拥有三页公共布局、Copilot 资料区、独立画布与工具避让；不复制业务判断。
 * 输入：视图类名、库/扩展开关和可用画布宽度；输出：主题一致的布局及触达区域。
 * 依赖：语义主题令牌；无网络、存储或业务副作用，不改变对象事实和人工坐标。
 * 限制：极窄画布无法在库右侧容纳整条工具栏，转到库下方的保留区居中；几何由浏览器验收。
 */
.ui-icon{flex:none}.button.button-primary{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}.button.button-primary:hover{background:var(--accent-hover)}.button.button-text{border-color:transparent;background:transparent;color:var(--accent)}.button.button-quiet{border-color:transparent;background:transparent;color:var(--muted)}.workbench-heading{margin-bottom:16px}.workbench-heading p{color:var(--muted);font-size:.9rem;margin-top:4px}.input-label{display:block;font-size:.87rem;font-weight:600;margin:15px 0 9px}.quiet-note{color:var(--muted);font-size:.8rem}.section-heading{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:12px}.section-heading h2{font-size:1.12rem}.section-heading h3{font-size:1rem}.interview-layout{display:grid;grid-template-columns:minmax(0,1fr) 280px;gap:40px;align-items:start}.current-question h2{font-size:1.6rem;line-height:1.55;max-width:46ch;margin-bottom:10px}.question-purpose{font-size:.88rem;color:var(--muted)}#answer-input{width:100%;min-height:220px;font-size:1rem;display:block}.recording-row{display:flex;align-items:center;gap:12px;margin-top:8px}.mic-message{font-size:.8rem;color:var(--muted)}.mic-message.is-error{color:var(--danger)}.recording-time{font-size:.83rem;color:var(--danger);font-variant-numeric:tabular-nums}.recording-transcript{padding:8px 14px;margin-top:12px;background:var(--paper);border-radius:8px}.recording-transcript p{font-size:.9rem}.answer-actions{display:flex;align-items:center;justify-content:space-between;gap:15px;margin-top:14px}.after-answer{border-top:1px solid var(--line);padding-top:22px;margin-top:26px}.save-confirmation{font-size:.8rem;color:var(--accent)}.next-questions{display:grid;gap:9px;margin-bottom:12px}.next-question{width:100%;text-align:left;border:1px solid var(--control-line);border-radius:10px;background:var(--surface);padding:14px 16px;display:grid;grid-template-columns:1fr 20px;gap:6px 12px}.next-question span{font-size:.95rem;line-height:1.6}.next-question small{grid-row:2}.next-question svg{grid-column:2;grid-row:1/3;align-self:center}.next-question:hover{background:var(--soft);border-color:var(--accent)}.work-context{border-left:1px solid var(--line);padding-left:28px}.work-context h3{font-size:1rem;line-height:1.7}.context-gap{display:flex;gap:10px;margin:28px 0}.context-dot{height:6px;width:6px;border-radius:50%;background:var(--warning);margin-top:10px;flex:none}.context-gap p{font-size:.9rem}.count-badge{font-size:.8rem;color:var(--muted)}.interview-history{margin-top:18px;border-top:1px solid var(--line)}.history-record{border-bottom:1px solid var(--line);padding:14px 0}.history-record p{font-size:.85rem}.record-question{color:var(--muted);font-size:.8rem!important;margin-bottom:7px}.record-meta{display:flex;flex-wrap:wrap;align-items:center;gap:10px;color:var(--muted);font-size:.78rem;margin-bottom:10px}.record-role{font-weight:650;color:var(--ink)}.record-text{white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.8}
.copilot-layout{display:grid;grid-template-columns:minmax(0,1fr) 350px;gap:24px;align-items:start}.copilot-layout:has(.empty-detail){grid-template-columns:1fr}.conversation-sidebar:has(.empty-detail){display:none}.conversation-history{min-width:0}.record-timeline{max-width:1100px}.record{padding:16px 0;border-bottom:1px solid var(--line)}.record.is-selected{padding:18px 20px;background:var(--soft);border-radius:10px;border-bottom-color:transparent;margin-top:4px}.record p{font-size:1rem;max-width:74ch}.record-action{margin-top:10px;padding-left:0}.conversation-sidebar{min-width:0}.conversation-detail{border:1px solid var(--line);border-radius:12px;background:var(--surface);padding:16px;position:relative}.conversation-detail h2,.candidate-preview h2{font-size:1.18rem;margin-bottom:12px}.selected-record-excerpt{margin:0 0 18px;color:var(--muted);padding-bottom:18px;border-bottom:1px solid var(--line);font-size:.87rem;line-height:1.8;white-space:pre-wrap;overflow-wrap:anywhere}.supplement-input{width:100%;min-height:140px;font-size:.92rem}.supplement-actions{display:flex;flex-direction:column;gap:8px;margin-top:12px}.candidate-preview{padding:16px 0;border-top:1px solid var(--line);margin-top:16px}.candidate-label{color:var(--warning);font-size:.8rem;margin-bottom:9px}.candidate-summary{font-size:.87rem;line-height:1.8}.candidate-update{padding:15px 0;border-bottom:1px solid var(--line);font-size:.86rem}.update-heading{display:flex;gap:8px;align-items:center;margin-bottom:8px}.update-values{display:grid;grid-template-columns:1fr 20px 1fr;gap:8px;color:var(--muted);overflow-wrap:anywhere}.update-values small{display:block;margin-bottom:4px}.update-after{color:var(--ink)}.property-change-list{margin:0;padding-left:14px;line-height:1.7}.candidate-actions{display:flex;flex-direction:column;gap:8px;margin-top:18px}.applied-note{border-top:1px solid var(--line);padding-top:20px;margin-top:20px;color:var(--accent)}.applied-note p{font-size:.9rem}
.canvas-page{height:calc(100dvh - 145px);min-height:490px;display:flex;flex-direction:column;background:var(--canvas)}.canvas-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 16px;border-bottom:1px solid var(--line);background:var(--surface);flex:none}.canvas-toolbar h1{font-size:1.32rem}.canvas-title-group .quiet-note{display:block;margin-top:4px}.canvas-toolbar-actions{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}.canvas-workspace{display:flex;flex:1;min-height:0;min-width:0}.canvas-stage{min-width:0;flex:1;overflow:hidden;position:relative;background-color:var(--canvas);background-image:radial-gradient(var(--dot) .9px,transparent .9px);background-size:22px 22px;touch-action:none}.canvas-stage.tool-pan{cursor:grab}.canvas-stage.is-dragging{cursor:grabbing}.canvas-world{position:absolute;width:1800px;height:1000px;transform-origin:0 0}.canvas-edges{position:absolute;inset:0;overflow:visible;pointer-events:none}.canvas-edges path{stroke:var(--muted);stroke-width:1.8;fill:none}.canvas-edges text{fill:var(--muted);font-size:12px;paint-order:stroke;stroke:var(--canvas);stroke-width:5px;stroke-linejoin:round}.canvas-edges marker path{stroke:var(--muted)}.canvas-node{position:absolute;width:230px;min-height:136px;border:1px solid var(--control-line);border-radius:12px;background:var(--surface);padding:16px;text-align:left;cursor:move;display:flex;flex-direction:column;align-items:flex-start;gap:9px;user-select:none;box-shadow:none}.canvas-node.is-selected{outline:2px solid var(--accent);outline-offset:3px}.canvas-node-top{display:flex;align-items:center;gap:7px;width:100%;color:var(--muted);font-size:.74rem}.node-identity{margin-left:auto;font-size:.73rem;color:var(--muted)}.canvas-node-title{font-size:1.07rem;line-height:1.5;font-weight:600}.canvas-node-role{font-size:.8rem;color:var(--muted)}.node-status{color:var(--warning);font-size:.74rem}.status-verified{color:var(--accent)}.status-negative,.status-conflict{color:var(--danger)}.canvas-tools{display:flex;gap:4px;flex:none}.canvas-tool{min-height:44px;padding:8px 10px;display:flex;align-items:center;gap:6px;border:0;background:transparent;border-radius:7px;font-size:.8rem}.canvas-tool.is-active{background:var(--soft);color:var(--accent)}.canvas-zoom{display:flex;align-items:center;gap:4px;flex:none}.canvas-zoom button{width:44px;height:44px;border:0;background:transparent;display:grid;place-items:center;border-radius:7px}.canvas-zoom button:hover{background:var(--soft)}.canvas-zoom span{min-width:40px;text-align:center;font-size:.8rem;font-variant-numeric:tabular-nums}.canvas-tool-hint{position:absolute;left:24px;top:20px;color:var(--muted);font-size:.85rem}.canvas-boundary-note{position:absolute;left:24px;top:20px;color:var(--muted);font-size:.78rem;pointer-events:none}.canvas-tool-hint~.canvas-boundary-note{display:none}.inspector{flex:0 0 300px;width:300px;padding:22px;background:var(--surface);border-left:1px solid var(--line);overflow:auto;min-width:0}.inspector h2{font-size:1.15rem;margin-top:10px}.inspector-heading p{font-size:.87rem;color:var(--muted);margin:7px 0}.inspector-kind{display:flex;align-items:center;gap:7px;font-size:.78rem;color:var(--muted)}.inspector-section{border-top:1px solid var(--line);padding-top:17px;margin-top:20px}.inspector-section h3{margin-bottom:10px}.inspector-section p{font-size:.87rem;line-height:1.8}.node-properties{margin:0;font-size:.85rem}.node-properties>div{display:grid;grid-template-columns:76px 1fr;gap:10px;margin:10px 0}.node-properties dt{color:var(--muted)}.node-properties dd{margin:0;overflow-wrap:anywhere}.inspector select{width:100%;margin:9px 0;min-height:44px}.evidence-record{border-top:1px solid var(--line);padding-top:12px;margin-top:12px}.inspector-close{float:right}.add-node-form{display:flex;align-items:center;gap:10px;padding:12px 24px;border-bottom:1px solid var(--line);background:var(--surface)}.add-node-form input{flex:1;min-height:44px}.add-node-form select{min-height:44px}.add-node-form label{font-size:.8rem}.page-changes{list-style:none;margin:0;padding:20px 30px;display:grid;grid-template-columns:repeat(3,1fr);gap:30px;background:var(--soft)}.page-changes li{display:grid;grid-template-columns:1fr 18px 1fr;gap:7px;font-size:.83rem;line-height:1.7}.page-changes strong{grid-column:1/-1;margin-bottom:5px}.change-before{color:var(--muted)}
@media(min-width:1600px){#answer-input{min-height:270px}.interview-layout{grid-template-columns:minmax(0,1fr) 330px;gap:55px}.copilot-layout{grid-template-columns:minmax(0,1fr) 420px;gap:55px}}@media(max-width:1100px){.interview-layout{grid-template-columns:minmax(0,1fr) 230px;gap:25px}.work-context{padding-left:22px}.copilot-layout{grid-template-columns:minmax(0,1fr) 320px;gap:24px}.conversation-detail{padding:18px}.inspector{flex-basis:270px;width:270px;padding:18px}}@media(max-width:850px){.interview-layout,.copilot-layout{grid-template-columns:1fr;gap:26px}.work-context{border-left:0;border-top:1px solid var(--line);padding:20px 0 0}.context-gap{margin:20px 0}.canvas-workspace{flex-direction:column}.canvas-stage{min-height:380px}.inspector{width:100%;flex-basis:auto;border-left:0;border-top:1px solid var(--line);overflow:visible}.canvas-page:has(.inspector){height:auto}.page-changes{grid-template-columns:1fr;gap:15px;padding:20px}}@media(max-width:720px){h1{font-size:1.5rem}.workbench-heading{margin-bottom:22px}.current-question h2{font-size:1.32rem}#answer-input{min-height:170px}.recording-row{flex-wrap:wrap;gap:5px}.answer-actions{gap:10px}.quiet-note{font-size:.73rem}.record p{font-size:.95rem}.canvas-page{height:calc(100dvh - 205px);min-height:510px}.canvas-toolbar{padding:13px 16px;align-items:flex-start}.canvas-toolbar-actions .button{padding:8px;font-size:.77rem}.canvas-toolbar-actions .button svg{width:16px}.canvas-toolbar-actions{gap:2px;max-width:185px}.canvas-title-group .quiet-note{font-size:.72rem}.canvas-stage{min-height:390px}.canvas-tools{gap:0}.canvas-tool{padding:7px;font-size:.73rem;gap:4px}.canvas-tool svg{width:16px}.canvas-zoom{gap:0}.canvas-zoom button{width:44px}.canvas-tool{min-width:44px}.canvas-tool span{display:none}.canvas-zoom span{min-width:30px;font-size:.73rem}.canvas-boundary-note{left:16px;top:15px;font-size:.72rem}.add-node-form{flex-wrap:wrap;padding:12px 16px;gap:8px}.add-node-form input{width:100%;flex-basis:100%}.add-node-form select{flex:1}.add-node-form label{display:none}}

/* 局部修改先看变化与确认，引用详情按需展开，避免占满侧栏。 */
.record-reference{color:var(--muted);font-size:.8rem;margin-bottom:8px}.candidate-preview:first-child{margin-top:0;padding-top:0;border-top:0}.candidate-preview+.conversation-detail{margin-top:24px}.compact-update-values{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;font-size:.85rem;line-height:1.7}.compact-update-values .property-change-list{margin:0;padding-left:18px}.candidate-evidence{border-top:1px solid var(--line);margin-top:15px;padding-top:12px;font-size:.85rem}.candidate-evidence summary{min-height:44px;cursor:pointer;color:var(--accent);display:flex;align-items:center}.candidate-evidence .candidate-update{margin-top:10px}

/* 本体关系可见但不当成执行连线，虚线区分结构关系。 */
.canvas-edge.is-semantic path{stroke-dasharray:6 5;opacity:.75}.canvas-edge.is-semantic text{fill:var(--muted)}

/* 属性编辑只占选中组件的侧面详情，沿用深浅语义颜色；主画布和底工具条不受表单侵占。 */
.node-property-form { margin-top: 20px; font-size: .84rem; }
.node-property-form fieldset { min-width: 0; margin: 0; padding: 0; border: 0; }
.property-field { display: grid; gap: var(--space-2); margin: var(--space-4) 0; }
.property-field label { color: var(--muted); font-size: .79rem; }
.property-field input, .property-field select, .property-field textarea { width: 100%; min-width: 0; min-height: 44px; padding: 10px 11px; margin: 0; border: 1px solid var(--control-line); border-radius: 7px; background: var(--paper); color: var(--ink); font: inherit; }
.property-field textarea { line-height: 1.7; resize: vertical; }
.property-field input[readonly] { color: var(--muted); }
.property-group { border-top: 1px solid var(--line); margin-top: var(--space-4); }
.property-group > summary, .inspector-native-source > summary { cursor: pointer; min-height: 44px; padding: 13px 0; font-weight: 600; }
.property-group-body { padding-bottom: 8px; }
.property-card { margin-top: var(--space-4); padding-top: var(--space-3); border-top: 1px solid var(--line); }
.property-card header { display: flex; gap: 8px; justify-content: space-between; align-items: center; }
.property-card header strong { min-width: 0; overflow-wrap: anywhere; }
.property-check { display: flex; align-items: flex-start; gap: var(--space-2); line-height: 1.65; margin: var(--space-4) 0; }
.property-check input { flex: none; margin-top: 4px; }
.property-file { display: grid; gap: 8px; color: var(--muted); font-size: .79rem; }
.property-file input { min-width: 0; max-width: 100%; font: inherit; }
.property-actions { display: grid; gap: 8px; padding: 16px 0 4px; }
.property-actions .button { width: 100%; min-height: 44px; }
.node-property-form fieldset:disabled { opacity: .75; }
.inspector-native-source .record-text { white-space: pre-wrap; overflow-wrap: anywhere; }
@media (min-width: 851px) { .inspector:has(.node-property-form) { width: 340px; flex-basis: 340px; } }

/* 模块价值：常用操作组成下方长条工具栏，剩余画布保持居中；分组及折叠不改变命令。
 * 输入：canvas-dock-view.mjs 的分组 HTML；输出：继承主题的常驻工具与上方次级菜单。
 * 副作用边界：只改变布局。工具在控制器中挂入 stage，按实际可用宽度响应右侧属性栏。 */
.canvas-workspace { --canvas-library-width:268px; --canvas-dock-edge:18px; --canvas-tool-reserved:140px; --canvas-control-bottom:env(safe-area-inset-bottom,0px); --canvas-voice-reserve:60px; position:relative; }
/* clip 避免焦点滚动移动固定工具；组件焦点定位由控制器负责。 */
.canvas-stage { container:canvas-workspace / inline-size; overflow:clip; }
.canvas-workspace.is-tools-expanded { --canvas-tool-reserved:300px; }
.canvas-bottom-dock { position:absolute; bottom:var(--canvas-control-bottom); left:calc((100% - var(--canvas-voice-reserve)) / 2); transform:translateX(-50%); width:max-content; max-width:calc(100% - 2 * var(--canvas-dock-edge) - var(--canvas-voice-reserve)); z-index:10; }
.canvas-tool-panel { display:flex; flex-wrap:wrap; align-items:center; justify-content:center; gap:5px; max-width:100%; padding:6px; border:1px solid var(--control-line);border-bottom:0; border-radius:10px 10px 0 0; background:var(--surface); }
.canvas-tool-group { display:flex; flex:none; align-items:center; gap:2px; }
.canvas-annotation-tools,.canvas-history-tools { border-left:1px solid var(--line); padding-left:5px; }
.canvas-tool-panel .canvas-tool { white-space:nowrap; }
.canvas-tool-panel .canvas-tool:disabled { opacity:.42; cursor:default; }
.canvas-tool-panel .canvas-tool:hover:disabled { background:transparent; }
.canvas-tool-panel .canvas-zoom { border-left:1px solid var(--line); padding-left:5px; }
.canvas-tools-toggle { min-width:44px; padding:8px 10px; }
.canvas-tools-toggle svg { transform:rotate(-90deg); }
.canvas-tools-toggle[aria-expanded="true"] svg { transform:rotate(90deg); }
.canvas-edit-menu { position:absolute; left:50%; transform:translateX(-50%); bottom:calc(100% + 8px); width:540px; max-width:100%; padding:8px; display:grid; grid-template-columns:repeat(5,minmax(0,1fr)); gap:4px; background:var(--surface); border:1px solid var(--control-line); border-radius:10px; z-index:11; }
.canvas-edit-action { display:flex; align-items:center; gap:6px; min-height:44px; padding:8px; background:transparent; border:0; border-radius:7px; font-size:.8rem; text-align:left; }
.canvas-edit-action:hover:not(:disabled) { background:var(--soft); }
.canvas-edit-action:disabled { opacity:.42; cursor:default; }
.canvas-selection-count { position:absolute; top:16px; right:20px; max-width:calc(100% - 40px); color:var(--muted); background:var(--surface); border:1px solid var(--line); border-radius:6px; padding:5px 8px; font-size:.74rem; z-index:3; }
@media(max-width:720px) { .canvas-workspace { --canvas-dock-edge:10px; } .canvas-selection-count { top:10px; right:8px; font-size:.7rem; } }

/* 批注层与旧讨论资料使用相同坐标；笔迹和备注始终不冒充业务对象或规则。 */
.canvas-ink { position:absolute; inset:0; overflow:visible; pointer-events:none; z-index:1; }
.canvas-ink path { fill:none; stroke:var(--accent); stroke-width:3; stroke-linecap:round; stroke-linejoin:round; pointer-events:stroke; }
.canvas-node { z-index:2; }
.canvas-note { position:absolute; width:210px; min-height:110px; display:flex; flex-direction:column; gap:8px; padding:14px; text-align:left; background:var(--soft); border:1px solid var(--warning); border-radius:10px; z-index:3; }
.canvas-note strong { font-size:.8rem; color:var(--warning); }
.canvas-note span { white-space:pre-wrap; overflow-wrap:anywhere; font-size:.85rem; line-height:1.6; }
.canvas-note small { color:var(--muted); font-size:.7rem; }
.canvas-note.is-selected { outline:2px solid var(--accent); outline-offset:3px; }
.canvas-note-inspector h2 { padding-top:8px; }
.canvas-note-inspector fieldset { margin:16px 0 0; padding:0; border:0; }
.canvas-note-inspector textarea { width:100%; min-height:150px; margin:8px 0; }
.canvas-note-inspector .button { margin-top:8px; }
.canvas-stage.tool-pen,.canvas-stage.tool-note { cursor:crosshair; }
.canvas-stage.tool-eraser { cursor:cell; }
.canvas-edit-action.is-active { background:var(--soft); color:var(--accent); }
/* 依据真正的 stage 宽度隐藏文字，aria-label/title 保留；组内保持 44px 触达。
 * 小画布把长条自然排成两行，次级菜单仍折叠，不裁切常用操作。 */
@container canvas-workspace (max-width: 1040px) {
  .canvas-tool-panel .canvas-tool { min-width:44px; width:44px; padding:7px; gap:0; }
  .canvas-tool-panel .canvas-tool span { display:none; }
  .canvas-tool-panel .canvas-tools { gap:2px; }
  .canvas-tool-panel .canvas-zoom { gap:0; }
  .canvas-tool-panel .canvas-zoom span { min-width:30px; }
}
@container canvas-workspace (max-width: 620px) {
  .canvas-tool-panel { column-gap:4px; row-gap:4px; }
  .canvas-annotation-tools,.canvas-history-tools { border-left:0; padding-left:0; }
  .canvas-tool-panel .canvas-zoom { border-left:0; padding-left:0; }
  .canvas-edit-menu { grid-template-columns:repeat(3,minmax(0,1fr)); max-height:160px; overflow-y:auto; overscroll-behavior:contain; }
}
@container canvas-workspace (max-width: 300px) {
  .canvas-tool-group { display:contents; }
  .canvas-edit-menu { grid-template-columns:repeat(2,minmax(0,1fr)); }
}

/* 空格临时平移覆盖原批注工具的光标，松开仍恢复原工具。 */
.canvas-stage.tool-pan { cursor:grab; }
.canvas-stage.tool-pan.is-dragging { cursor:grabbing; }

/* Copilot 的主资料为共用规范稿；原话可追溯但默认不堆在项目主区。 */
.project-dossier { min-width:0; }
.project-dossier .section-heading { margin-bottom:7px; }
.dossier-boundary { margin:0; color:var(--muted); font-size:.79rem; line-height:1.7; }
.dossier-actions { display:flex; align-items:center; flex-wrap:wrap; gap:10px 16px; margin:14px 0 18px; }
.dossier-actions .button { font-size:.82rem; }
.dossier-content { max-height:min(720px,calc(100dvh - 280px)); min-height:200px; overflow:auto; padding-right:8px; overscroll-behavior:contain; }
.dossier-headline { margin:0 0 12px; font-size:.9rem; color:var(--ink); line-height:1.75; overflow-wrap:anywhere; }
.dossier-section { margin:0 0 16px; }
.dossier-section h3 { font-size:.85rem; font-weight:600; margin:0 0 6px; color:var(--accent); }
.dossier-paragraph { display:grid; grid-template-columns:minmax(0,1fr) auto; gap:3px 12px; min-width:0; padding:5px 0; }
.dossier-paragraph > p { margin:0; font-size:.87rem; line-height:1.8; color:var(--ink); white-space:pre-wrap; overflow-wrap:anywhere; }
.dossier-basis { display:inline-block; margin-left:9px; font-size:.69rem; line-height:1.6; color:var(--muted); }
.dossier-source { font-size:.72rem; color:var(--muted); min-width:0; }
.dossier-source > summary { padding:3px 0; min-height:44px; cursor:pointer; }
.dossier-source[open] { grid-column:1/-1; }
.dossier-source figure { margin:6px 0; padding:8px 12px; border-left:2px solid var(--line); background:var(--soft); }
.dossier-source figcaption { margin-bottom:3px; font-size:.68rem; }
.dossier-source blockquote { margin:0; max-height:170px; overflow:auto; font-size:.79rem; color:var(--ink); line-height:1.8; white-space:pre-wrap; overflow-wrap:anywhere; }
.dossier-uncovered { margin:6px 0; padding-top:9px; border-top:1px solid var(--line); font-size:.75rem; line-height:1.7; color:var(--muted); }
.dossier-empty { padding:18px 0 22px; color:var(--muted); font-size:.86rem; line-height:1.8; }
.dossier-empty p { margin:0; }
.project-source-history { border-top:1px solid var(--line); margin-top:18px; font-size:.81rem; color:var(--muted); }
.project-source-history > summary { cursor:pointer; min-height:42px; padding:12px 0; }
.project-source-history .record-timeline { max-height:420px; overflow:auto; padding-right:8px; }
.copilot-page .selected-record-excerpt { max-height:150px; overflow:auto; }
@media(max-width:720px) {
  .dossier-content { max-height:calc(100dvh - 325px); }
  .dossier-actions { gap:6px 12px; margin:12px 0; }
  .dossier-actions .button { font-size:.77rem; }
  .dossier-paragraph { column-gap:9px; }
  .dossier-paragraph > p { font-size:.83rem; }
  .dossier-source > summary { font-size:.68rem; }
  .project-source-history .record-timeline { max-height:330px; }
}
.canvas-edge.is-routing-blocked path{stroke:var(--warning);stroke-dasharray:6 4}
.canvas-edge.is-routing-blocked text{fill:var(--warning)}
/* 连线可缩放，但命中宽度保持至少 24 个屏幕像素；透明命中层不改变业务线的视觉粗细。 */
.canvas-edge .canvas-edge-hit{pointer-events:stroke;stroke:transparent!important;stroke-width:24;stroke-dasharray:none;opacity:1;fill:none;vector-effect:non-scaling-stroke;cursor:pointer}
.canvas-edge text{pointer-events:all;cursor:pointer}
.canvas-edge.is-selected .canvas-edge-line,.canvas-edge:focus .canvas-edge-line{stroke:var(--accent);stroke-width:3}
.canvas-edge:focus{outline:none}
.canvas-connection-inspector fieldset{border:0;padding:0;margin:18px 0 0;min-width:0}
.canvas-connection-inspector label{display:block;margin-top:12px;font-size:.85rem}
.canvas-connection-inspector input{width:100%;min-height:44px;margin:8px 0}
.canvas-connection-inspector .button{margin-top:10px}


/* 紧凑工作区契约：标题与任务组用 8–16px 间距，正文保持原字号，控件保持 44px。
 * 外壳按实际内容占高，让长项目名和放大文字自然换行；世界坐标及二维画布不受影响。 */
.workbench-heading,.canvas-title-group,.conversation-history,.conversation-detail,.candidate-preview { min-width: 0; }
.workbench-heading h1,.workbench-heading p,.section-heading h2,.section-heading h3,.canvas-title-group h1,.canvas-title-group .quiet-note { overflow-wrap: anywhere; }
.section-heading { gap: 8px 12px; flex-wrap: wrap; margin-bottom: 8px; }
.copilot-layout { gap: 24px; }
.selected-record-excerpt { margin-bottom: 12px; padding-bottom: 12px; }
.candidate-preview + .conversation-detail { margin-top: 16px; }
.candidate-update { padding: 12px 0; }
.dossier-actions { margin: 10px 0 12px; gap: 8px 12px; }
.dossier-content { padding: 0 var(--space-2) var(--space-2) 0; scroll-padding: var(--space-2); }
.dossier-paragraph,.dossier-source { overflow-wrap: anywhere; }
.dossier-paragraph > p,.dossier-headline { max-width: 74ch; }
.dossier-source > summary { min-height: 44px; padding: 10px 0; white-space: normal; }
.project-source-history { margin-top: 12px; }
.project-source-history > summary { min-height: 44px; }
.project-dossier .section-heading { justify-content:flex-start; gap:var(--space-2); }
.dossier-content:has(.dossier-empty) { min-height:0; }
.dossier-empty { padding:var(--space-2) 0 var(--space-4); max-width:74ch; }
/* 来源正文与操作是两种分组：同组按钮保持8px，不让窄列中的保存/删除挤在一起。 */
.canvas-note-inspector .property-actions .button,.canvas-connection-inspector .property-actions .button { margin-top:0; }
.canvas-note-inspector .input-label { margin:0 0 var(--space-2); }
.canvas-node-top,.inspector-kind { gap:var(--space-2); }
.inspector-section { margin-top:var(--space-5); padding-top:var(--space-4); }
.inspector-section h3 { margin-bottom:var(--space-2); }
.node-properties>div { gap:var(--space-2); margin:var(--space-2) 0; }
.project-source-history .record-timeline { padding: 4px 8px 6px 6px; scroll-padding: 6px; }
/* 画布占余下高度，页头换行不再依赖减去固定像素；超短视窗允许页面纵向滚动。 */
.workbench:has(.canvas-page) { height: 100dvh; }
.workspace:has(.canvas-page) { display: flex; flex-direction: column; min-height: 0; }
.canvas-page { height: auto; min-height: 360px; flex: 1; min-width: 0; }
.canvas-toolbar { flex-wrap: wrap; }
.canvas-title-group { flex: 1 1 20rem; }
.canvas-toolbar-actions { min-width: 0; max-width: 100%; }
.canvas-stage { min-height: 0; }
.canvas-boundary-note,.canvas-tool-hint { max-width: calc(100% - 40px); overflow-wrap: anywhere; }
.inspector { padding: 16px; }
.node-properties > div { grid-template-columns: minmax(0,76px) minmax(0,1fr); }
.canvas-node:focus-visible,.canvas-tool-panel :focus-visible,.canvas-edit-menu :focus-visible { outline-width: 3px; outline-offset: -3px; }
.canvas-edge:focus-visible .canvas-edge-line { stroke-width: 4; stroke-dasharray: 8 4; vector-effect: non-scaling-stroke; }
.canvas-edge:focus-visible text { text-decoration: underline; }
.canvas-tool.is-active,.canvas-edit-action.is-active { font-weight: 650; text-decoration: underline; text-underline-offset: 4px; }
/* 展开菜单保留焦点内距；狭窄画布通过换行和滚动工作，不裁掉按钮文字。 */
.canvas-edit-menu { border-color: var(--control-line); padding: 8px; scroll-padding: 6px; }
.canvas-edit-action { min-width: 0; overflow-wrap: anywhere; }
.canvas-selection-count { overflow-wrap: anywhere; }
@media (min-width:1600px) { .copilot-layout { gap: 28px; } }
@media (max-width:850px) {
  .copilot-layout { grid-template-columns: 1fr; gap: 16px; }
  .workbench:has(.canvas-page) { height: auto; }
  .canvas-page { min-height: 510px; }
  .canvas-stage { min-height: 320px; }
  .dossier-content { max-height: none; min-height: 0; }
}
@media (max-width:720px) {
  .workbench-heading { margin-bottom: 12px; }
  .quiet-note { font-size: .8rem; }
  .canvas-toolbar { padding: 8px 16px; gap: 8px; }
  .canvas-title-group { flex-basis: 100%; }
  .canvas-title-group .quiet-note { font-size: .8rem; }
  .canvas-toolbar-actions { justify-content: flex-start; gap: 4px; max-width: 100%; }
  .canvas-toolbar-actions .button { font-size: .8rem; padding: 8px 10px; }
  .canvas-page { height: auto; }
  .canvas-stage { min-height: 320px; }
  .dossier-content { max-height: none; }
  .dossier-paragraph { grid-template-columns: minmax(0,1fr); }
  .dossier-paragraph > p { font-size: .87rem; }
  .dossier-source > summary { font-size: .8rem; }
  .dossier-actions .button { font-size: .82rem; }

}
@container canvas-workspace (max-width:350px) {
  .canvas-library { --canvas-tool-reserved: 148px; }
}

/* 返回用虚线和文字双重表达；拆分提示占独立布局，不遮挡画布操作。 */
.canvas-edge.is-return .canvas-edge-line{stroke-dasharray:10 4}
.node-workflow-boundary{margin-left:auto;font-size:.68rem;font-weight:600;color:var(--accent)}
.canvas-flow-warning{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 16px;background:var(--soft);color:var(--ink);font-size:.85rem;border-bottom:1px solid var(--line);flex-wrap:wrap}
.canvas-flow-warning>span{flex:1;min-width:220px}

/* 流程提示进入底部信息栏，标题区只保留名称、数量和操作；不隐藏真实缺口。
 * 详情在页脚自身占位展开，画布按剩余高度伸缩，不覆盖组件库或下方工具。 */
.canvas-toolbar { padding:6px 16px; gap:6px 12px; }
.canvas-title-group { display:flex; align-items:center; flex-wrap:wrap; gap:4px 14px; }
.canvas-heading-line { display:flex; align-items:baseline; gap:8px; flex-wrap:wrap; }
.canvas-toolbar h1 { font-size:1.1rem; line-height:1.5; }
.canvas-title-group .quiet-note { margin:0; }
.canvas-status { display:flex; flex:1 1 20rem; align-items:flex-start; gap:6px 12px; min-width:0; background:var(--surface); }
.canvas-status-details { flex:1; min-width:0; }
.canvas-status-details > summary { min-height:44px; display:flex; align-items:center; gap:6px; padding:4px 0; color:var(--ink); cursor:pointer; font-weight:600; }
.canvas-status-details > summary::before { content:'›'; font-size:1.1rem; }
.canvas-status-details[open] > summary::before { content:'⌄'; }
.canvas-status-content { max-height:140px; overflow:auto; padding:0 8px 8px 0; overscroll-behavior:contain; line-height:1.65; overflow-wrap:anywhere; }
.canvas-status-content p { margin:0 0 6px; }
.canvas-status > .button { flex:none; min-height:44px; }
.app-footer:has(.canvas-status) { padding:0 16px; align-items:flex-start; }
.app-footer:has(.canvas-status) > #local-status { min-height:44px; display:flex; align-items:center; }
.app-footer:has(.canvas-status) > span:not(#local-status):not(.prototype-label) { display:none; }
.canvas-fullscreen:has(.canvas-status,.canvas-legend-status) .app-footer { display:flex; }
.canvas-fullscreen:has(.canvas-status,.canvas-legend-status) .canvas-page { height:auto; min-height:0; }
@media(max-width:720px) {
  .canvas-status { flex-basis:100%; }
  .app-footer:has(.canvas-status) { gap:0; }
  .app-footer:has(.canvas-status) > #local-status { min-height:24px; }
  .canvas-status-content { max-height:120px; }
}

/* 框选是视图覆盖层：随世界坐标缩放，边框与填充同时提示范围，不拦截节点输入。 */
.canvas-marquee { position:absolute; z-index:5; pointer-events:none; box-sizing:border-box; border:2px solid var(--accent); background:color-mix(in srgb,var(--accent) 12%,transparent); }
.canvas-selection-count > span { display:block; margin-top:3px; }
.canvas-stage:focus-visible { outline:3px solid var(--accent); outline-offset:-3px; }
.workbench span[data-ui-copy] { font: inherit; }

/* 语义工作区：同一模型的两种视图；侧栏表单独立滚动，保留底部画布控制可见。 */
.semantic-view-tabs { display:flex;gap:4px;align-items:center;padding:4px;border:1px solid var(--line);border-radius:10px; }
.semantic-view-tabs button { border:0;border-radius:7px;background:transparent;color:inherit;padding:7px 10px;white-space:nowrap; }
.semantic-view-tabs button[aria-pressed="true"] { background:var(--soft);color:var(--ink); }
/* 顶部更多只占一个主按钮，展开层限宽限高；辅助项不再随视图改变顶栏换行数量。
 * 使用原生 details 的开合与焦点，菜单在标题下方滚动，不占业务流程布局或底部工具的锚点。 */
.canvas-toolbar-actions { position:relative; }
.canvas-toolbar-more { position:static;flex:none; }
.canvas-toolbar-more > summary { list-style:none;min-height:44px;cursor:pointer; }
.canvas-toolbar-more > summary::-webkit-details-marker { display:none; }
.canvas-toolbar-more[open] > summary { background:var(--soft); }
.canvas-toolbar-more-panel { position:absolute;right:0;top:calc(100% + 4px);z-index:50;display:grid;gap:4px;width:244px;max-width:calc(100vw - 32px);max-height:min(236px,40dvh);overflow:auto;padding:8px;scroll-padding:8px;border:1px solid var(--control-line);border-radius:10px;background:var(--surface);box-shadow:0 6px 20px rgb(0 0 0 / 12%); }
.canvas-toolbar-more-panel .button { justify-content:flex-start;text-align:left;min-width:0;white-space:normal;overflow-wrap:anywhere; }
/* 图例只在状态栏按周期出现；宿主高度固定，显隐不推动画布、工具条或当前缩放中心。 */
.app-footer:has(.canvas-legend-status) { min-height:44px; padding:0 16px; align-items:center; }
.app-footer:has(.canvas-legend-status) > span:not(#local-status):not(.prototype-label) { display:none; }
.app-footer:has(.canvas-legend-status) > #local-status { flex:0 1 auto; min-height:44px; display:flex; align-items:center; }
.canvas-legend-status { flex:1 1 24rem; min-width:0; height:28px; overflow:hidden; }
.canvas-legend-status-items { display:flex; align-items:center; gap:16px; height:100%; overflow-x:auto; white-space:nowrap; font-size:12px; scrollbar-width:thin; }
.canvas-legend-status-items span { flex:none; }
.canvas-legend-status-items span::before { content:""; display:inline-block; width:16px; border-top:2px solid currentColor; margin-right:6px; vertical-align:middle; }
.canvas-legend-status-items [data-relation-kind="referenceRelation"]::before { border-top-style:dotted; }
.canvas-legend-status-items [data-relation-kind="dependency"]::before { border-top-style:dashed; }
.semantic-canvas-alerts { display:flex; flex-wrap:wrap; gap:8px 16px; padding:8px 18px; font-size:12px; color:var(--danger); }
.semantic-inspector { overflow:auto;max-height:100%; }
.semantic-inspector select,.semantic-inspector input,.semantic-inspector textarea,.semantic-proposal-review select,.semantic-proposal-review input { width:100%;max-width:100%;color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:7px;padding:8px; }
.semantic-inspector label,.semantic-proposal-review label { display:grid;gap:6px;margin-block:10px; }
.semantic-inspector input[type="checkbox"] { width:auto; }
.semantic-inspector pre { white-space:pre-wrap;overflow-wrap:anywhere; }
.semantic-error { color:var(--danger,#ca766b); }
.semantic-migration-notice,.semantic-migration-preview { border:1px solid var(--line);border-radius:12px;margin:12px 24px;padding:12px 16px;background:var(--surface); }
.semantic-migration-notice { display:flex;gap:16px;align-items:center;justify-content:space-between; }
.semantic-migration-preview pre { max-height:200px;overflow:auto;white-space:pre-wrap; }
.semantic-migration-preview label { display:flex;justify-content:space-between;gap:10px;margin-block:8px; }
.semantic-proposal-review { padding:18px;border:1px solid var(--line);border-radius:12px;background:var(--surface); }
.semantic-proposal-review article { border-top:1px solid var(--line);padding-block:14px; }
.semantic-proposal-review pre { overflow:auto;max-height:260px;white-space:pre-wrap;font-size:12px; }
.semantic-proposal-review blockquote { margin:8px 0;padding-left:10px;border-left:2px solid var(--line);white-space:pre-wrap; }
.semantic-proposal-review small { display:block;overflow-wrap:anywhere;color:var(--muted); }
.semantic-adopted { color:var(--accent,#78b496); }
@media(max-width:850px) { .semantic-migration-notice { flex-direction:column;align-items:flex-start;margin:8px; }.semantic-view-tabs button { padding:5px 7px; }.semantic-legend { gap:6px 10px; } }

/* 项目类型侧栏独立拥有表单布局：fieldset 原生 min-content 与长版本选项不能撑宽画布。
 * 两份源码逐行排列并在容器内换行；侧栏参与正常布局、独立滚动，不覆盖 stage 底部工具。
 * 只限定 semantic-definition 外壳，不改变字段值、控件顺序、焦点或采用命令。 */
.semantic-definition-shell {
  flex:0 1 420px;width:min(420px,100%);max-width:100%;min-width:0;min-height:0;
  display:grid;grid-template-columns:minmax(0,1fr);align-content:start;gap:16px;
  margin:0;padding:16px;border:0;border-left:1px solid var(--line);background:var(--surface);
  overflow:auto;overscroll-behavior:contain;scroll-padding:16px;overflow-wrap:anywhere;
}
.semantic-definition-shell :where(section,article,details,label,header,footer) { min-width:0;max-width:100%; }
.semantic-definition-navigation,.semantic-definition-editor { display:grid;grid-template-columns:minmax(0,1fr);gap:12px;min-width:0; }
.semantic-definition-shell label { display:grid;grid-template-columns:minmax(0,1fr);gap:6px;margin:0;font-size:.87rem; }
.semantic-definition-shell label:has(> input[type="checkbox"]) { display:flex;align-items:flex-start;gap:8px; }
.semantic-definition-shell :where(select,textarea,input:not([type="checkbox"]):not([type="radio"])) { display:block;width:100%;max-width:100%;min-width:0; }
.semantic-definition-shell select { white-space:normal;overflow-wrap:anywhere; }
.semantic-definition-shell textarea { white-space:pre-wrap;overflow-wrap:anywhere;resize:vertical;min-height:160px;font:inherit;font-size:.84rem;line-height:1.65; }
.semantic-definition-shell input[type="checkbox"] { flex:none;width:auto;margin:4px 0 0; }
.semantic-definition-editor > header { display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center; }
.semantic-definition-editor h2 { margin:0;font-size:1.15rem; }
.semantic-definition-shell :where(p,ul) { margin:0;line-height:1.7; }
.semantic-definition-shell ul { padding-left:20px; }
.semantic-definition-shell :where(pre,code) { white-space:pre-wrap;overflow-wrap:anywhere; }
.semantic-definition-editor > footer,.semantic-definition-shell > section { display:grid;grid-template-columns:minmax(0,1fr);gap:12px; }
.semantic-definition-shell article { display:grid;grid-template-columns:minmax(0,1fr);gap:10px;border-top:1px solid var(--line);padding-top:12px; }
.semantic-definition-shell button { min-width:0;max-width:100%;min-height:44px;padding:8px 12px;border:1px solid var(--control-line);border-radius:8px;background:var(--surface);white-space:normal;overflow-wrap:anywhere; }
.semantic-definition-shell button:hover:not(:disabled) { background:var(--soft); }
@media(max-width:850px) {
  .semantic-definition-shell { flex:0 1 auto;width:100%;max-height:min(720px,70dvh);border-left:0;border-top:1px solid var(--line); }
}

/* 重导回窗口保留三方比较和明确决定；窄屏只让比较表横向滚动，不挤出提交按钮。 */
.semantic-reimport-dialog{width:min(1100px,calc(100vw - 32px));max-height:calc(100dvh - 32px);overflow:auto;border:1px solid var(--line,#d9e1e8);border-radius:18px;padding:24px;color:var(--ink,#17263a);background:var(--surface,#fff)}
.semantic-reimport-dialog::backdrop{background:rgba(18,29,48,.45)}
.semantic-reimport-dialog header{display:block}.semantic-reimport-dialog h2{margin:0 0 8px}.semantic-reimport-dialog label{display:block;margin:12px 0}.semantic-reimport-dialog select,.semantic-reimport-dialog textarea{display:block;width:100%;max-width:100%;margin-top:6px}.semantic-reimport-dialog input[type=checkbox]{margin-right:8px}.semantic-reimport-dialog button{margin:12px 10px 0 0}.semantic-reimport-item{border-top:1px solid #d9e1e8;padding:18px 0}.semantic-reimport-item h3{margin:0 0 8px;font-size:16px;overflow-wrap:anywhere}.semantic-reimport-diff{max-width:100%;overflow:auto}.semantic-reimport-diff table{width:100%;table-layout:fixed;border-collapse:collapse;min-width:640px}.semantic-reimport-diff th,.semantic-reimport-diff td{border:1px solid #d9e1e8;padding:8px;vertical-align:top;text-align:left}.semantic-reimport-diff th:first-child{width:15%}.semantic-reimport-diff pre{white-space:pre-wrap;overflow-wrap:anywhere;font:inherit;font-size:12px;margin:0;max-height:300px;overflow:auto}.semantic-reimport-conflict{color:#8e3915;background:#fff4e8;padding:12px;border-radius:8px}.semantic-reimport-dialog .semantic-error{white-space:pre-wrap;overflow-wrap:anywhere}
@media(max-width:600px){.semantic-reimport-dialog{padding:16px;width:calc(100vw - 20px);max-height:calc(100dvh - 20px)}}

/* 模块价值：文字讨论收为小气泡，阅读与编辑只在批注侧栏展开；兼容旧备注坐标。
 * 输入：canvas-comment-view 的安全HTML；输出：主题一致的标记/列表/表单，不改变业务图。
 * 节点气泡按视图zoom反向缩放，拖动预览由画布协调器负责；手绘仅在更多工具中。 */
.canvas-comment-marker.canvas-note { width:36px; min-height:36px; height:36px; padding:7px; display:flex; align-items:center; justify-content:center; flex-direction:row; gap:0; border:1px solid var(--accent); border-radius:50%; color:var(--accent); background:var(--surface); transform:scale(var(--comment-scale,1)); transform-origin:top left; z-index:4; }
.canvas-comment-marker svg { width:20px; height:20px; flex:none; }
.canvas-comment-marker:hover { background:var(--soft); }
.canvas-comment-marker .canvas-comment-count { position:absolute; top:-6px; right:-6px; min-width:18px; height:18px; padding:0 4px; border-radius:50%; background:var(--accent); color:var(--surface); font-size:11px; line-height:18px; text-align:center; }
.canvas-note-inspector { width:320px; flex-basis:320px; padding:20px; }
.canvas-note-inspector h2 { margin:0 0 8px; font-size:1.05rem; }
.canvas-note-inspector .inspector-close { margin:0; }
.canvas-comment-filters { display:flex; gap:4px; margin:20px 0 8px; padding-bottom:12px; border-bottom:1px solid var(--line); }
.canvas-comment-filters button { flex:1; min-height:36px; padding:6px 8px; font:inherit; font-size:.78rem; background:transparent; border:0; border-radius:6px; color:var(--muted); }
.canvas-comment-filters button[aria-pressed=true] { color:var(--accent); background:var(--soft); }
.canvas-comment-list { margin:0; padding:0; list-style:none; max-height:180px; overflow:auto; }
.canvas-comment-item { display:block; width:100%; padding:12px 8px; border:0; border-bottom:1px solid var(--line); background:transparent; color:var(--ink); font:inherit; text-align:left; border-radius:4px; }
.canvas-comment-item:hover,.canvas-comment-item.is-selected { background:var(--soft); }
.canvas-comment-item button { display:block; width:100%; padding:4px 0; border:0; background:transparent; font:inherit; color:var(--ink); text-align:left; border-radius:4px; }
.canvas-comment-item button:hover { color:var(--accent); }
.canvas-comment-anchor { display:flex; align-items:flex-start; gap:6px; margin-bottom:5px; font-size:.75rem; color:var(--muted); overflow-wrap:anywhere; }
.canvas-comment-anchor svg { width:15px; height:15px; flex:none; margin-top:2px; }
.canvas-comment-body { display:block; font-size:.85rem; line-height:1.6; white-space:pre-wrap; overflow-wrap:anywhere; }
.canvas-comment-status { display:block; margin-top:5px; font-size:.72rem; color:var(--muted); }
.canvas-note-inspector #canvas-note-form { margin-top:20px; padding-top:16px; border-top:1px solid var(--line); }
.canvas-note-inspector textarea { border:1px solid var(--control-line); border-radius:7px; padding:10px 11px; background:var(--paper); color:var(--ink); font:inherit; font-size:.88rem; line-height:1.65; resize:vertical; min-height:110px; }
.canvas-note-inspector .property-actions { display:flex; flex-wrap:wrap; align-items:center; gap:8px; }
.canvas-note-inspector .property-actions .button { width:auto; flex:1 1 auto; font-size:.8rem; }
.canvas-note-inspector .property-actions [type=submit] { flex-basis:100%; }
@media(max-width:850px) { .canvas-note-inspector { width:100%; flex-basis:auto; padding:20px; } .canvas-comment-list { max-height:200px; } }

.canvas-comment-reading { margin-top:20px; padding-top:16px; border-top:1px solid var(--line); }
.canvas-comment-reading .canvas-comment-text { margin:12px 0 16px; white-space:pre-wrap; overflow-wrap:anywhere; font-size:.88rem; line-height:1.7; }

/* 草稿线可以先画并随文件保留；虚线明确尚未采用为业务关系。 */
.canvas-edge.is-draft-connection .canvas-edge-line { stroke-dasharray: 7 5; }
