:root{--bg:#111215;--panel:#18191d;--panel2:#202126;--line:#2d2f36;--text:#f4f2ed;--muted:#91949e;--accent:#ff725e;--blue:#7aa2ff;--shadow:0 18px 50px #0007}
*{box-sizing:border-box}html,body,#app{width:100%;height:100%;margin:0;overflow:hidden}body{font:14px/1.45 Inter,ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;background:var(--bg);color:var(--text)}
button,input,textarea,select{font:inherit;color:inherit}.topbar{height:58px;display:flex;align-items:center;justify-content:space-between;padding:0 16px 0 14px;background:#151619eF;border-bottom:1px solid var(--line);position:fixed;inset:0 0 auto 0;z-index:20;backdrop-filter:blur(14px)}.brand,.top-actions,.form-row,.dialog-actions{display:flex;align-items:center;gap:9px}.brand-mark{width:31px;height:31px;border-radius:9px;background:var(--accent);display:grid;place-items:center;font-weight:900;color:#18110f;box-shadow:0 0 0 4px #ff725e16}.board-title{width:210px;background:transparent;border:1px solid transparent;border-radius:7px;padding:5px 7px;font-weight:650}.board-title:hover,.board-title:focus{border-color:var(--line);outline:0}.save-state{font-size:11px;color:#737681}.btn,.icon-btn,.avatar{border:1px solid var(--line);background:#202126;border-radius:8px;padding:7px 11px;cursor:pointer}.btn:hover,.icon-btn:hover{background:#292b31}.btn.accent{background:var(--accent);border-color:var(--accent);color:#211412;font-weight:700}.btn.danger{color:#ff8172}.avatar{width:34px;height:34px;padding:0;border-radius:50%;background:#38323f;color:#e8cef6;font-size:11px;font-weight:700}
.btn.upload-btn{border-color:#4a4d57;background:#282a30;color:#e4e5e8;font-weight:650}.btn.upload-btn:hover{border-color:#7c7f89;background:#30323a}
.btn.save-btn{border-color:#3f6954;background:#21352b;color:#bff0d2;font-weight:700}.btn.save-btn:hover{border-color:#6da886;background:#294537}.btn.save-btn.saved{animation:save-confirm .45s ease}@keyframes save-confirm{50%{box-shadow:0 0 0 4px #70d69a2b;transform:translateY(-1px)}}
.btn.load-btn{border-color:#4b5369;background:#232936;color:#cbd8ff;font-weight:650}.btn.load-btn:hover{border-color:#7584ad;background:#2c3547}
.sidebar{position:fixed;z-index:15;left:14px;top:74px;width:66px;padding:8px 6px;background:#191a1eE8;border:1px solid var(--line);border-radius:15px;box-shadow:var(--shadow);backdrop-filter:blur(12px)}.tool{width:52px;height:50px;border:0;border-radius:10px;background:transparent;color:#a8abb3;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;cursor:pointer}.tool span{font-size:19px;height:23px}.tool em{font-size:10px;font-style:normal}.tool:hover,.tool.active{background:#2a2b31;color:#fff}.tool.active{box-shadow:inset 2px 0 var(--accent)}.tool-divider{height:1px;background:var(--line);margin:6px}
.tool-menu{position:fixed;z-index:30;left:88px;top:184px;width:220px;padding:7px;background:#1b1c20;border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow)}.tool-menu[hidden]{display:none}.tool-menu button{display:flex;align-items:center;gap:10px;width:100%;padding:10px;border:0;border-radius:8px;background:transparent;text-align:left;cursor:pointer}.tool-menu button:hover{background:#292b31}.tool-menu b{display:grid;place-items:center;width:28px;height:28px;border-radius:8px;background:#33353c;color:var(--accent)}.tool-menu span{font-size:12px;font-weight:700}.tool-menu small{display:block;margin-top:2px;color:#777a84;font-size:9px;font-weight:400}
.theme-menu{top:min(432px,calc(100vh - 230px))}.theme-menu button.active{background:#2d2f36;box-shadow:inset 2px 0 var(--accent)}.theme-menu .theme-swatch{border:1px solid #ffffff30}.theme-swatch.dark{background:linear-gradient(135deg,#111215,#34363e)}.theme-swatch.paper{background:linear-gradient(135deg,#f2eadb,#b9aa91)}.theme-swatch.blueprint{background:linear-gradient(135deg,#071725,#28709a)}
.background-menu{top:min(482px,calc(100vh - 390px));max-height:calc(100vh - 90px);overflow:auto}.background-menu button.active{background:#2d2f36;box-shadow:inset 2px 0 var(--accent)}.background-menu .background-swatch{border:1px solid #ffffff30;background-color:#17181c}.background-swatch.theme{background-image:linear-gradient(135deg,#17181c 0 50%,#6d5a3c 50%)}.background-swatch.caseboard{background-image:url("./assets/investigation-board.png");background-size:100% auto;background-position:center -1px}.background-swatch.dots{background-image:radial-gradient(#9b9da5 1px,transparent 1px);background-size:7px 7px}.background-swatch.grid{background-image:linear-gradient(#777a843d 1px,transparent 1px),linear-gradient(90deg,#777a843d 1px,transparent 1px);background-size:7px 7px}.background-swatch.lines{background-image:repeating-linear-gradient(0deg,transparent 0 6px,#777a8466 6px 7px)}.background-swatch.plain{background:#292b31}
.asset-library{position:fixed;z-index:14;left:92px;top:74px;width:310px;max-height:calc(100vh - 92px);overflow:auto;padding:18px;background:#191a1eF5;border:1px solid var(--line);border-radius:15px;box-shadow:var(--shadow);backdrop-filter:blur(12px);transform:translateX(-430px);transition:transform .2s}.asset-library.open{transform:none}.asset-library h2{font-size:17px;margin:3px 0 16px}.asset-drop{width:100%;padding:14px;border:1px dashed #4b4e58;border-radius:11px;background:#222329;color:#ddd;cursor:pointer}.asset-drop:hover{border-color:var(--accent);background:#ff725e0d}.asset-drop span{display:block;margin-top:3px;color:#777a84;font-size:10px}.asset-library input{width:100%;margin:11px 0 7px;background:#121316;border:1px solid #30323a;border-radius:8px;padding:9px 10px;outline:none}.asset-storage-status{display:flex;justify-content:space-between;gap:8px;margin:0 1px 10px;color:#747781;font-size:9px}.asset-storage-status span:last-child{text-align:right}.asset-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:9px}.asset-card{position:relative;border:1px solid #30323a;border-radius:10px;overflow:hidden;background:#222329;cursor:pointer}.asset-card:hover{border-color:#737681}.asset-card img{display:block;width:100%;height:92px;object-fit:cover}.asset-card span{display:block;padding:7px 8px;font-size:10px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.asset-delete{position:absolute;right:5px;top:5px;width:24px;height:24px;border:0;border-radius:7px;background:#111c;color:#ddd;opacity:0;cursor:pointer}.asset-card:hover .asset-delete{opacity:1}.asset-empty{padding:30px 14px;text-align:center;color:#777a84}.asset-empty strong,.asset-empty span{display:block}.asset-empty strong{color:#c7c8cd;font-size:12px}.asset-empty span{font-size:10px;margin-top:7px}.asset-tip{margin:12px 0 0;color:#676a73;font-size:10px;text-align:center}
.align-toolbar{position:fixed;z-index:25;left:50%;top:72px;transform:translateX(-50%);display:flex;align-items:center;gap:4px;padding:6px 7px;background:#1b1c20F2;border:1px solid var(--line);border-radius:11px;box-shadow:var(--shadow);backdrop-filter:blur(10px)}.align-toolbar[hidden]{display:none}.align-toolbar span{padding:0 7px;color:#858892;font-size:10px;font-weight:700}.align-toolbar button{width:31px;height:29px;border:0;border-radius:7px;background:transparent;color:#c8cad0;cursor:pointer}.align-toolbar button:hover{background:#30323a;color:#fff}.align-toolbar i{width:1px;height:20px;background:var(--line);margin:0 3px}.align-toolbar em{padding:0 7px;color:#777a84;font-size:9px;font-style:normal}
.viewport{--canvas-pattern-size:24px;position:fixed;inset:58px 0 0 0;overflow:hidden;outline:none;cursor:default;background-color:#111215;background-image:radial-gradient(#3a3b43 1px,transparent 1px);background-size:var(--canvas-pattern-size) var(--canvas-pattern-size)}.viewport.hand{cursor:grab}.viewport.panning{cursor:grabbing}.viewport.port-proximity:not(.hand):not(.panning),.viewport.port-proximity:not(.hand):not(.panning) .world,.viewport.port-proximity:not(.hand):not(.panning) .connections,.viewport.port-proximity:not(.hand):not(.panning) .connection,.viewport.port-proximity:not(.hand):not(.panning) .node{cursor:crosshair!important}.world{position:absolute;left:0;top:0;width:6000px;height:6000px;transform-origin:0 0}.connections{position:absolute;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none}.connection{pointer-events:stroke;cursor:pointer;fill:none;stroke:var(--line-color,#777b86);stroke-width:2}.connection:hover,.connection.selected{stroke:var(--accent);stroke-width:3}.connection-label{pointer-events:none;fill:#bfc1c8;font-size:12px;paint-order:stroke;stroke:#111215;stroke-width:5px}.line-preview{fill:none;stroke:var(--accent);stroke-width:2;stroke-dasharray:7 7}
.line-preview[hidden]{display:none!important}
.line-preview.snapped{stroke:#ff8a76;stroke-width:3;stroke-dasharray:none;filter:drop-shadow(0 0 5px #ff725e99)}
.connection-hit{fill:none;stroke:transparent;stroke-width:16;pointer-events:stroke;cursor:pointer}.connection-hit:hover~.connection{stroke:var(--accent);stroke-width:3}#node-layer{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}#node-layer .node{pointer-events:auto}
.connection.line-dashed,.connection.line-flowing,.connection.line-flowing-reverse{stroke-dasharray:8 7}.connection.line-flowing{animation:line-flow-forward .8s linear infinite}.connection.line-flowing-reverse{animation:line-flow-reverse .8s linear infinite}@keyframes line-flow-forward{to{stroke-dashoffset:-15}}@keyframes line-flow-reverse{to{stroke-dashoffset:15}}
.connection-pulse{fill:#fff;stroke:#fff;stroke-width:1.5;pointer-events:none;filter:drop-shadow(0 0 3px #fff) drop-shadow(0 0 8px #fff)}
.line-endpoint{fill:#18191d;stroke:var(--accent);stroke-width:3;pointer-events:all;cursor:grab;filter:drop-shadow(0 0 4px #ff725e88)}.line-endpoint:hover{fill:var(--accent);transform-box:fill-box;transform-origin:center;transform:scale(1.25)}.line-endpoint:active{cursor:grabbing}.line-endpoint-editing .connection,.line-endpoint-editing .connection-label,.line-endpoint-editing .connection-pulse{opacity:.22!important}
.connection{stroke-width:var(--line-width,2);opacity:var(--line-opacity,1);stroke-linecap:round;stroke-linejoin:round}.connection:hover,.connection.selected,.connection-hit:hover+.connection{stroke-width:var(--line-hover-width,3)}.connection.line-dashed{stroke-dasharray:8 7}.connection.motion-flow-forward{stroke-dasharray:8 7;animation:line-flow-forward .8s linear infinite}.connection.motion-flow-reverse{stroke-dasharray:8 7;animation:line-flow-reverse .8s linear infinite}
.viewport.dragover::after{content:"释放图片，收入案件素材库";position:absolute;inset:18px;border:2px dashed var(--accent);border-radius:18px;background:#ff725e12;display:grid;place-items:center;color:#ffd3cc;font-size:18px;font-weight:700;z-index:30;pointer-events:none}
.selection-box{position:absolute;z-index:40;border:1px solid #7aa2ff;background:#7aa2ff20;box-shadow:0 0 0 1px #7aa2ff25 inset;pointer-events:none}.selection-box[hidden]{display:none}
.smart-align-guide{position:absolute;z-index:41;pointer-events:none;background:#ff725e;box-shadow:0 0 6px #ff725eaa}.smart-align-guide[hidden]{display:none}.smart-align-guide.vertical{top:0;bottom:0;width:1px}.smart-align-guide.horizontal{left:0;right:0;height:1px}
.pair-relationship-card{position:absolute;z-index:42;width:310px;max-height:300px;overflow:auto;padding:12px;background:color-mix(in srgb,var(--panel) 94%,transparent);border:1px solid color-mix(in srgb,var(--accent) 45%,var(--line));border-radius:13px;box-shadow:0 16px 42px #0009;backdrop-filter:blur(14px);transform:translate(-50%,-50%)}.pair-relationship-card[hidden]{display:none}.pair-relationship-card.dragging{cursor:grabbing;user-select:none;box-shadow:0 20px 55px #000b,0 0 0 2px color-mix(in srgb,var(--accent) 24%,transparent)}.pair-relationship-header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:-4px -4px 8px;padding:4px;border-radius:8px;cursor:grab;touch-action:none}.pair-relationship-header:active{cursor:grabbing}.pair-relationship-header small{display:block;color:var(--accent);font-size:9px;font-weight:800;letter-spacing:.14em}.pair-relationship-header strong{display:block;margin:3px 0 0;font-size:13px}.pair-relationship-header>span{color:var(--muted);font-size:18px}.pair-relation-list{display:grid;gap:8px}.pair-relation-item{display:grid;gap:7px;width:100%;padding:9px 10px;border:1px solid var(--line);border-radius:9px;background:color-mix(in srgb,var(--panel2) 86%,transparent);color:var(--text);text-align:left}.pair-relation-item:focus-within{border-color:var(--accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 16%,transparent)}.pair-relation-name,.pair-relation-description{display:block;width:100%;margin:0;padding:6px 7px;border:1px solid transparent;border-radius:6px;background:#ffffff07;color:var(--text);outline:0;resize:vertical}.pair-relation-name{font-size:12px;font-weight:800}.pair-relation-description{min-height:48px;color:var(--muted);font-size:10px;line-height:1.45}.pair-relation-name:hover,.pair-relation-description:hover{border-color:var(--line)}.pair-relation-name:focus,.pair-relation-description:focus{border-color:var(--accent);background:#ffffff0c}.pair-relation-footer{display:flex;align-items:center;justify-content:space-between;gap:8px}.pair-relation-footer small{color:var(--muted);font-size:8px}.pair-relation-footer button{padding:4px 7px;border:1px solid var(--line);border-radius:6px;background:transparent;color:var(--muted);font-size:9px;cursor:pointer}.pair-relation-footer button:hover{border-color:var(--accent);color:var(--text)}.pair-relation-empty{margin:0;padding:10px;border:1px dashed var(--line);border-radius:9px;color:var(--muted);font-size:11px;text-align:center}
.node.person.asset-hover{border-color:var(--accent);box-shadow:0 0 0 3px #ff725e44,0 16px 40px #0008}.node.person.asset-hover::after{content:"释放以设为人物照片";position:absolute;inset:0;border-radius:12px;background:#111c;color:#fff;display:grid;place-items:center;font-size:12px;font-weight:700;z-index:5;pointer-events:none}
.node.image.asset-hover{border-color:var(--node-color);box-shadow:0 0 0 3px color-mix(in srgb,var(--node-color) 30%,transparent),0 16px 40px #0008}.node.image.asset-hover::after{content:"释放以填入图片模块";position:absolute;inset:0;border-radius:12px;background:#111d;color:#fff;display:grid;place-items:center;font-size:12px;font-weight:800;z-index:8;pointer-events:none}
.node{position:absolute;width:260px;min-height:116px;background:#1d1e22;border:1px solid #35373e;border-radius:13px;box-shadow:0 13px 30px #0006;user-select:none;cursor:grab;transition:box-shadow .15s,border-color .15s;content-visibility:auto;contain-intrinsic-size:280px 180px}.node:active{cursor:grabbing}.node:hover{border-color:#555862}.node.selected{border-color:var(--node-color);box-shadow:0 0 0 2px color-mix(in srgb,var(--node-color) 22%,transparent),0 16px 40px #0008}.node-head{height:7px;border-radius:13px 13px 0 0;background:var(--node-color)}.node-body{padding:15px}.node-kicker{font-size:10px;color:var(--node-color);letter-spacing:.11em;text-transform:uppercase;font-weight:800}.node h3{font-size:18px;margin:3px 0 4px}.node p{margin:0;color:#9da0a9;font-size:12px;white-space:pre-wrap}.node.person{width:285px}.node.person .node-body{display:grid;grid-template-columns:52px 1fr;gap:12px}.node-avatar{width:52px;height:52px;border-radius:12px;object-fit:cover;background:color-mix(in srgb,var(--node-color) 17%,#24252a);display:grid;place-items:center;font-size:20px;font-weight:800;color:var(--node-color)}.node.note{width:230px;background:color-mix(in srgb,var(--node-color) 11%,#202126)}.node.note .node-kicker{display:none}.node.image{width:280px;overflow:visible}.node.image img{display:block;width:100%;height:145px;object-fit:cover;background:#27282d;border-radius:12px 12px 0 0}.node.image .node-body{padding:11px 14px}.node.image p{display:none}.port{position:absolute;width:14px;height:14px;border-radius:50%;background:#191a1e;border:2px solid var(--node-color);opacity:0;z-index:3;cursor:crosshair;pointer-events:auto}.node:hover .port,.node.selected .port,.line-mode .port{opacity:1}.port:hover{transform:scale(1.35);background:var(--node-color)}.port.left{left:-8px;top:calc(50% - 7px)}.port.right{right:-8px;top:calc(50% - 7px)}.port.top{top:-8px;left:calc(50% - 7px)}.port.bottom{bottom:-8px;left:calc(50% - 7px)}
.node.selected{outline:1px solid color-mix(in srgb,var(--node-color) 55%,white)}
.port.link-target{opacity:1;transform:scale(1.6);background:var(--accent);border-color:#fff;box-shadow:0 0 0 5px #ff725e33}.port.hover-target{opacity:1;transform:scale(1.35);background:var(--node-color);box-shadow:0 0 0 5px color-mix(in srgb,var(--node-color) 24%,transparent)}
.resize-handle{position:absolute;width:12px;height:12px;border:2px solid #a9abb2;background:#1a1b1f;border-radius:3px;z-index:6;opacity:0;pointer-events:auto}.node:hover .resize-handle,.node.selected .resize-handle{opacity:1}.resize-handle:hover{background:var(--node-color);border-color:#fff;transform:scale(1.2)}.resize-handle.nw{left:-7px;top:-7px;cursor:nwse-resize}.resize-handle.ne{right:-7px;top:-7px;cursor:nesw-resize}.resize-handle.sw{left:-7px;bottom:-7px;cursor:nesw-resize}.resize-handle.se{right:-7px;bottom:-7px;cursor:nwse-resize}.node.resized .node-body{max-height:calc(100% - 7px);overflow:auto}.node.image.resized img{max-height:calc(100% - 62px);min-height:70px}
.node-placeholder{height:145px;display:grid;place-items:center;background:linear-gradient(135deg,#25262c,#1b1c20);color:#6e717a;font-size:12px;border-bottom:1px dashed #393b43}
.node [contenteditable="true"]{cursor:text;user-select:text;outline:none;background:#ffffff0a;border-radius:5px;box-shadow:0 0 0 1px var(--node-color);padding:2px 4px;margin-left:-4px;min-width:40px;min-height:32px}.node h3[contenteditable="true"]{white-space:pre-wrap}.node.editing{cursor:default}.node.editing .port{opacity:0}.node.image.editing p{display:block;position:relative;z-index:7;background:#202126;margin-top:7px}
.port::before{content:"";position:absolute;left:50%;top:50%;width:30px;height:30px;transform:translate(-50%,-50%);border-radius:50%}.node.person.uniform{height:126px}.node.person.uniform .node-body{height:118px;overflow:hidden}.node.person.uniform p{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}
.inspector{position:fixed;z-index:14;right:14px;top:74px;width:286px;max-height:calc(100vh - 90px);overflow:auto;padding:18px;background:#191a1eF2;border:1px solid var(--line);border-radius:15px;box-shadow:var(--shadow);backdrop-filter:blur(12px);transform:translateX(calc(100% + 28px));transition:transform .2s}.inspector.open{transform:none}.panel-heading,.dialog-head{display:flex;justify-content:space-between;align-items:flex-start}.eyebrow{font-size:9px;letter-spacing:.18em;color:#6f727b;font-weight:800}.panel-heading h2,.dialog-head h2{font-size:17px;margin:3px 0 18px}.icon-btn{width:30px;height:30px;padding:0;font-size:18px}.empty-state{color:var(--muted);font-size:12px;padding:18px 0}.inspector label{display:block;color:#858892;font-size:11px;margin:0 0 14px}.inspector input,.inspector textarea,.inspector select,#ai-dialog textarea{display:block;width:100%;margin-top:6px;background:#121316;border:1px solid #30323a;border-radius:8px;padding:9px 10px;outline:none;resize:vertical}.inspector input:focus,.inspector textarea:focus,.inspector select:focus,#ai-dialog textarea:focus{border-color:#6e7180}.color-picker{display:flex;gap:8px;margin-top:8px}.color-dot{width:24px;height:24px;border-radius:50%;border:2px solid transparent;cursor:pointer;background:var(--color)}.color-dot.active{box-shadow:0 0 0 2px #fff;border-color:#1b1c20}.form-row{justify-content:space-between;margin-top:18px}
.color-dot.custom-color-dot{display:grid;place-items:center;border:1px dashed color-mix(in srgb,var(--accent) 60%,var(--line));background:color-mix(in srgb,var(--accent) 9%,var(--panel2));color:var(--accent);font-size:17px;font-weight:500;line-height:1}.color-dot.custom-color-dot:hover{border-style:solid;background:color-mix(in srgb,var(--accent) 18%,var(--panel2));transform:scale(1.08)}
.inspector-field{display:block;color:#858892;font-size:11px;margin:0 0 14px}.inspector-field-label{display:block}.custom-color-row{display:grid;grid-template-columns:44px minmax(0,1fr);gap:8px;margin-top:9px}.inspector .custom-color-row input{height:36px;margin:0}.inspector .custom-color-row input[type="text"]{font:700 11px/1 ui-monospace,SFMono-Regular,Consolas,monospace;letter-spacing:.05em;text-transform:uppercase}#field-node-color,#field-line-color{display:block;width:44px;height:36px;padding:3px;border:1px solid #30323a;border-radius:8px;background:var(--panel2);cursor:pointer}#field-node-color:hover,#field-node-color[aria-expanded="true"],#field-line-color:hover,#field-line-color[aria-expanded="true"]{border-color:#777b88;box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 18%,transparent)}#field-node-color i,#field-line-color i{display:block;width:100%;height:100%;border-radius:5px;background:#ff725e;box-shadow:inset 0 0 0 1px #ffffff24}
.inspector-disclosure{margin:0 0 14px;border:1px solid var(--line);border-radius:10px;background:color-mix(in srgb,var(--panel2) 52%,transparent)}.inspector-disclosure[hidden]{display:none}.inspector-disclosure>summary{display:flex;align-items:center;justify-content:space-between;min-height:42px;padding:10px 11px;color:var(--text);font-size:11px;font-weight:720;list-style:none;cursor:pointer;user-select:none}.inspector-disclosure>summary::-webkit-details-marker{display:none}.inspector-disclosure>summary::after{content:"+";display:grid;place-items:center;width:23px;height:23px;border:1px solid var(--line);border-radius:7px;background:color-mix(in srgb,var(--panel) 82%,transparent);color:var(--muted);font-size:17px;font-weight:500;line-height:1;transition:color .16s,border-color .16s,background .16s}.inspector-disclosure>summary:hover::after{border-color:color-mix(in srgb,var(--accent) 58%,var(--line));color:var(--text)}.inspector-disclosure[open]>summary{border-bottom:1px solid var(--line)}.inspector-disclosure[open]>summary::after{content:"−";border-color:color-mix(in srgb,var(--accent) 48%,var(--line));background:color-mix(in srgb,var(--accent) 12%,var(--panel));color:var(--accent)}.inspector-disclosure-body{padding:11px}.inspector-disclosure[open]>.inspector-disclosure-body{animation:inspector-disclosure-in .2s ease-out both}@keyframes inspector-disclosure-in{from{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:none}}.inspector-disclosure.inspector-field{color:var(--muted);font-size:11px}.inspector-disclosure .color-picker{margin-top:0}.inspector-disclosure .style-size-controls{margin:9px 0 0}.inspector-disclosure .style-size-controls:last-child{margin-bottom:0}
.custom-color-popover{--picker-hue-color:#ff0000;margin-top:8px;padding:10px;border:1px solid var(--line);border-radius:11px;background:color-mix(in srgb,var(--panel) 96%,#000);box-shadow:0 16px 36px #0008}.custom-color-popover[hidden]{display:none}.custom-color-sv{position:relative;height:176px;overflow:hidden;border:1px solid #ffffff24;border-radius:7px;touch-action:none;cursor:crosshair;background:linear-gradient(to top,#000,transparent),linear-gradient(to right,#fff,transparent),var(--picker-hue-color);box-shadow:inset 0 0 0 1px #0004}.custom-color-sv:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.custom-color-sv>i{position:absolute;left:100%;top:0;width:14px;height:14px;border:3px solid #fff;border-radius:50%;transform:translate(-50%,-50%);box-shadow:0 0 0 2px #111,0 1px 5px #000;pointer-events:none}.custom-color-hue-row{display:grid;grid-template-columns:36px minmax(0,1fr);align-items:center;gap:10px;margin-top:10px}.custom-color-hue-row>span{width:36px;height:36px;border:1px solid #ffffff35;border-radius:50%;background:#ff725e;box-shadow:inset 0 0 0 1px #0003}.inspector .custom-color-hue-row input[type="range"]{width:100%;height:12px;margin:0;padding:0;border:0;border-radius:999px;background:linear-gradient(90deg,#f00,#ff0,#0f0,#0ff,#00f,#f0f,#f00);box-shadow:inset 0 0 0 1px #0004;outline:0;appearance:none;cursor:pointer}.custom-color-hue-row input[type="range"]::-webkit-slider-thumb{width:18px;height:18px;border:3px solid #fff;border-radius:50%;background:transparent;box-shadow:0 0 0 2px #111;appearance:none}.custom-color-hue-row input[type="range"]::-moz-range-thumb{width:12px;height:12px;border:3px solid #fff;border-radius:50%;background:transparent;box-shadow:0 0 0 2px #111}.custom-color-rgb{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:11px}.inspector .custom-color-rgb label{margin:0;color:var(--muted);text-align:center;font-size:10px}.inspector .custom-color-rgb input{height:38px;margin:0;padding:7px 4px;text-align:center;font-size:13px;font-variant-numeric:tabular-nums}.custom-color-rgb label span{display:block;margin-top:5px;font-weight:750}.custom-color-popover-actions{display:grid;grid-template-columns:1fr 1.35fr;gap:8px;margin-top:12px}.custom-color-popover-actions .btn{width:100%;padding:8px 6px;font-size:10px}.save-custom-color-btn{width:100%;margin-top:8px;padding:7px 6px;font-size:10px}.saved-color-head{display:flex;align-items:center;gap:8px;margin-top:10px;padding-top:9px;border-top:1px solid var(--line);color:var(--muted);font-size:9px}.saved-color-picker{display:flex;flex-wrap:wrap;gap:9px;margin-top:8px;min-height:24px}.saved-color-chip{position:relative;display:block;width:24px;height:24px}.saved-color-chip .color-dot{display:block;width:24px;height:24px;padding:0}.saved-color-delete{position:absolute;z-index:2;right:-6px;top:-7px;width:15px;height:15px;padding:0;border:1px solid var(--line);border-radius:50%;background:var(--panel);color:var(--text);font:800 11px/12px system-ui;cursor:pointer;opacity:0;transition:opacity .12s,transform .12s}.saved-color-chip:hover .saved-color-delete,.saved-color-delete:focus{opacity:1}.saved-color-delete:hover{color:#fff;background:#d65050;border-color:#d65050;transform:scale(1.08)}.saved-color-empty{color:var(--muted);font-size:9px;font-weight:400}
.multi-summary{margin:0 0 16px;padding:10px;border-radius:8px;background:#24252b;color:#bfc1c8;font-size:11px}.connection.selected{filter:drop-shadow(0 0 4px #ff725e88)}
.multi-avatar-size-control{margin:12px 0;padding:11px;border:1px solid color-mix(in srgb,var(--line) 88%,transparent);border-radius:10px;background:color-mix(in srgb,var(--panel2) 54%,transparent)}.multi-avatar-size-control>span{display:flex;justify-content:space-between;gap:8px;color:var(--muted);font-size:10px;font-weight:650}.multi-avatar-size-control small{font-size:9px;font-weight:500}.multi-avatar-size-row{display:grid;grid-template-columns:minmax(0,1fr) 72px 38px;align-items:center;gap:9px;margin-top:9px}.inspector .multi-avatar-size-row input[type="range"]{margin:0;padding:0;border:0;background:transparent;accent-color:var(--accent)}.inspector .multi-avatar-size-row .number-with-unit input{min-height:36px;height:36px;margin:0;padding:6px 21px 6px 6px;text-align:right}.multi-avatar-size-row .btn{display:grid;place-items:center;width:38px;min-width:38px;height:36px;min-height:36px;padding:0;font-size:18px}
.range-control{display:grid;grid-template-columns:minmax(0,1fr) 66px;gap:10px;align-items:center;margin-top:7px}.inspector .range-control input[type="range"]{margin:0;padding:0;border:0;background:transparent;box-shadow:none;accent-color:var(--accent)}.range-control output{font-size:10px;color:var(--muted);text-align:right;font-variant-numeric:tabular-nums}.number-with-unit{position:relative;display:block}.inspector .number-with-unit input{width:100%;margin:0;padding:7px 22px 7px 7px;text-align:right;font-variant-numeric:tabular-nums}.number-with-unit>span{position:absolute;right:6px;top:50%;transform:translateY(-50%);font-size:9px;color:var(--muted);pointer-events:none}
.canvas-hint{position:absolute;left:50%;bottom:22px;transform:translateX(-50%);color:#747780;font-size:11px;pointer-events:none}.zoom-control{position:absolute;right:18px;bottom:18px;display:flex;background:#1b1c20;border:1px solid var(--line);border-radius:9px;overflow:hidden}.zoom-control button{border:0;border-right:1px solid var(--line);background:transparent;padding:7px 10px;cursor:pointer;color:#aaa}.zoom-control button:last-child{border:0}.zoom-control button:hover{background:#282a30}.minimap{position:absolute;right:18px;bottom:64px;width:145px;height:92px;background:#15161aeB;border:1px solid var(--line);border-radius:9px;overflow:hidden}.minimap::before{content:"OVERVIEW";position:absolute;left:7px;top:5px;font-size:7px;letter-spacing:.15em;color:#555862}.minimap-view{position:absolute;border:1px solid #7b7e89;background:#ffffff08}
dialog{width:min(540px,calc(100vw - 32px));border:1px solid #363841;border-radius:16px;background:#1a1b1f;color:var(--text);padding:22px;box-shadow:0 30px 100px #000a}dialog::backdrop{background:#09090bc9;backdrop-filter:blur(3px)}.export-grid{display:grid;gap:9px}.export-grid button{display:flex;align-items:center;gap:13px;text-align:left;background:#212228;border:1px solid #32343c;border-radius:11px;padding:13px;cursor:pointer}.export-grid button:hover{border-color:#62656f}.export-grid b{display:grid;place-items:center;width:42px;height:42px;border-radius:9px;background:#30323a;color:#ff8a76}.export-grid span{font-weight:700}.export-grid small{display:block;color:#7f828c;font-weight:400;margin-top:3px}.dialog-copy{color:#989ba4;font-size:13px}.dialog-actions{justify-content:space-between;margin-top:15px}.dialog-actions span{font-size:11px;color:#777a83}.toast{position:fixed;z-index:100;left:50%;bottom:28px;transform:translate(-50%,20px);background:#f0eee8;color:#191a1d;padding:9px 14px;border-radius:8px;opacity:0;pointer-events:none;transition:.2s;box-shadow:0 10px 30px #0007}.toast.show{opacity:1;transform:translate(-50%,0)}
.help-dialog{width:min(980px,calc(100vw - 42px));height:min(790px,calc(100vh - 42px));max-height:calc(100vh - 42px);padding:0;overflow:hidden;border-color:color-mix(in srgb,var(--accent) 22%,var(--line));background:color-mix(in srgb,var(--panel) 96%,#000);box-shadow:0 34px 110px #000c,0 0 0 1px #ffffff08 inset}
.help-dialog-head{min-height:92px;margin:0;padding:22px 26px 18px;border-bottom:1px solid var(--line);background:linear-gradient(135deg,color-mix(in srgb,var(--accent) 10%,transparent),transparent 48%)}
.help-dialog-head h2{margin:3px 0 2px;font-size:24px;letter-spacing:-.025em}.help-dialog-head p{margin:0;color:var(--muted);font-size:11px}.help-dialog-body{height:calc(100% - 154px);overflow:auto;padding:24px 26px 30px;scrollbar-color:color-mix(in srgb,var(--accent) 45%,var(--line)) transparent}
.help-dialog section+section{margin-top:28px;padding-top:25px;border-top:1px solid var(--line)}.help-section-title{display:flex;align-items:flex-start;gap:12px;margin-bottom:15px}.help-section-title>span{display:grid;place-items:center;width:31px;height:31px;border:1px solid color-mix(in srgb,var(--accent) 38%,var(--line));border-radius:9px;background:color-mix(in srgb,var(--accent) 10%,transparent);color:var(--accent);font-size:10px;font-weight:850}.help-section-title h3{margin:0;font-size:16px}.help-section-title p{margin:2px 0 0;color:var(--muted);font-size:10px}
.help-steps{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:9px;margin:0;padding:0;list-style:none;counter-reset:help-step}.help-steps li{position:relative;min-height:116px;padding:14px 13px;border:1px solid var(--line);border-radius:12px;background:color-mix(in srgb,var(--panel2) 70%,transparent);counter-increment:help-step}.help-steps li::before{content:counter(help-step);display:block;margin-bottom:13px;color:var(--accent);font-size:10px;font-weight:900}.help-steps b,.help-steps span{display:block}.help-steps b{font-size:12px}.help-steps span{margin-top:5px;color:var(--muted);font-size:9px;line-height:1.55}
.shortcut-groups{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:11px}.shortcut-group{padding:14px;border:1px solid var(--line);border-radius:13px;background:color-mix(in srgb,var(--panel2) 62%,transparent)}.shortcut-group h4{margin:0 0 10px;color:var(--text);font-size:11px}.shortcut-group dl{display:grid;gap:2px;margin:0}.shortcut-group dl>div{display:grid;grid-template-columns:minmax(132px,.8fr) minmax(0,1fr);align-items:center;gap:12px;min-height:35px;padding:5px 2px;border-top:1px solid color-mix(in srgb,var(--line) 72%,transparent)}.shortcut-group dl>div:first-child{border-top:0}.shortcut-group dt{display:flex;align-items:center;gap:4px;margin:0;white-space:nowrap}.shortcut-group dd{margin:0;color:var(--muted);font-size:10px}.shortcut-group i{color:var(--muted);font-size:9px;font-style:normal}.shortcut-group kbd{display:inline-flex;min-width:26px;min-height:24px;align-items:center;justify-content:center;padding:3px 7px;border:1px solid color-mix(in srgb,var(--line) 82%,#fff);border-bottom-width:2px;border-radius:6px;background:color-mix(in srgb,var(--panel) 78%,#000);color:var(--text);font:700 9px/1.2 Inter,ui-sans-serif,system-ui;box-shadow:0 2px 5px #0002}
.help-tip-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:9px}.help-tip-grid article{min-height:92px;padding:13px;border:1px solid var(--line);border-radius:11px;background:linear-gradient(145deg,color-mix(in srgb,var(--panel2) 78%,transparent),color-mix(in srgb,var(--panel) 80%,transparent))}.help-tip-grid b{font-size:11px}.help-tip-grid p{margin:6px 0 0;color:var(--muted);font-size:9px;line-height:1.6}
.help-dialog-footer{display:flex;height:62px;align-items:center;justify-content:space-between;gap:16px;padding:12px 26px;border-top:1px solid var(--line);background:color-mix(in srgb,var(--panel2) 58%,var(--panel))}.help-dialog-footer span{color:var(--muted);font-size:10px}.help-dialog-footer .btn{min-width:108px}
@media(max-width:780px){.help-dialog{height:calc(100vh - 24px)}.help-dialog-body{padding:18px}.help-steps{grid-template-columns:1fr 1fr}.shortcut-groups,.help-tip-grid{grid-template-columns:1fr}.help-dialog-footer{padding-inline:18px}.help-dialog-footer span{display:none}}
.archive-name-field{display:block;margin-top:18px;color:#9a9da6;font-size:11px}.archive-name-field input{display:block;width:100%;margin-top:7px;padding:11px 12px;border:1px solid #383b44;border-radius:9px;background:#121316;color:var(--text);font-size:14px;outline:none}.archive-name-field input:focus{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 15%,transparent)}.saved-board-list{display:grid;gap:9px;max-height:min(430px,58vh);overflow:auto;padding-right:3px}.saved-board-card{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:14px;padding:13px 14px;border:1px solid #32343c;border-radius:11px;background:#212228}.saved-board-card:hover{border-color:#555966;background:#24262c}.saved-board-card h3{margin:0 0 4px;font-size:14px}.saved-board-card p{margin:0;color:#7f828c;font-size:10px}.saved-board-card .btn{white-space:nowrap}.saved-board-actions{display:flex;align-items:center;gap:6px}.saved-board-actions .btn{padding:6px 9px;font-size:11px}.saved-board-actions .rename-board-btn{color:#cbd8ff}.saved-board-actions .delete-board-btn{color:#ff9588}.saved-board-empty{min-height:150px;display:grid;place-content:center;text-align:center;color:#878a94}.saved-board-empty[hidden]{display:none}.saved-board-empty b{color:#cfd1d7;font-size:14px}.saved-board-empty span{margin-top:6px;font-size:11px}.load-board-dialog{width:min(680px,calc(100vw - 32px))}.compact-dialog{width:min(460px,calc(100vw - 32px))}.field-error{margin:8px 0 0;color:#ff9588;font-size:11px}.field-error[hidden]{display:none}.btn.danger-solid{background:#8f3028;border-color:#aa4138;color:#fff;font-weight:700}.btn.danger-solid:hover{background:#a73a31;border-color:#c45147}
.line-inline-editor{position:fixed;z-index:80;width:180px;transform:translate(-50%,-50%);padding:8px 10px;border:1px solid var(--accent);border-radius:8px;background:#18191d;color:#fff;text-align:center;outline:none;box-shadow:0 10px 30px #000a}.line-inline-editor[hidden]{display:none}
@media(max-width:760px){.save-state,.minimap,.canvas-hint,.top-actions .btn:not(.accent):not(.save-btn){display:none}.sidebar{left:50%;top:auto;bottom:12px;transform:translateX(-50%);width:auto;display:flex}.tool{width:46px}.tool-divider{width:1px;height:38px}.tool-menu{left:50%;top:auto;bottom:76px;transform:translateX(-50%)}.inspector{right:8px;top:66px;width:calc(100vw - 16px);max-height:55vh}.asset-library{left:8px;top:66px;width:calc(100vw - 16px);max-height:62vh;transform:translateY(calc(-100% - 80px))}.asset-library.open{transform:none}.zoom-control{bottom:78px}.board-title{width:150px}.node{width:230px}.btn.save-btn{padding-inline:9px}}
.inspector.open.person-reveal{animation:person-inspector-slide-right .68s linear both;will-change:transform,opacity}.inspector.open.person-reveal .panel-heading{animation:person-inspector-content-right .54s .045s cubic-bezier(.12,.78,.18,1) both}.inspector.open.person-reveal #node-form{animation:person-inspector-content-right .58s .085s cubic-bezier(.12,.78,.18,1) both}@keyframes person-inspector-slide-right{0%{opacity:.12;transform:translate3d(-180px,0,0)}42%{opacity:.92;transform:translate3d(-42px,0,0)}70%{opacity:1;transform:translate3d(-13px,0,0)}88%{transform:translate3d(-3px,0,0)}100%{opacity:1;transform:translate3d(0,0,0)}}@keyframes person-inspector-content-right{0%{opacity:0;transform:translate3d(-64px,0,0)}58%{opacity:.96;transform:translate3d(-8px,0,0)}100%{opacity:1;transform:translate3d(0,0,0)}}
@media(prefers-reduced-motion:reduce){*:not(.connection){transition:none!important}.inspector.open.person-reveal,.inspector.open.person-reveal .panel-heading,.inspector.open.person-reveal #node-form{animation:none!important}}
body[data-theme="paper"]{--bg:#ded7c8;--panel:#f2eadb;--panel2:#e8decd;--line:#c6baa6;--text:#302b25;--muted:#756d62;--shadow:0 18px 50px #645b4a35;background:#ded7c8;color:var(--text)}body[data-theme="paper"] .topbar{background:#eee6d8F2}body[data-theme="paper"] .sidebar,body[data-theme="paper"] .inspector,body[data-theme="paper"] .asset-library,body[data-theme="paper"] .tool-menu,body[data-theme="paper"] .align-toolbar{background:#f2eadbF2}body[data-theme="paper"] .viewport{background-color:#ded7c8;background-image:radial-gradient(#aa9e8c 1px,transparent 1px)}body[data-theme="paper"] .node{background:#f7efe1;border-color:#c7baa4;color:#302b25;box-shadow:0 12px 26px #73675235}body[data-theme="paper"] .node p{color:#6e665b}body[data-theme="paper"] .node.note{background:color-mix(in srgb,var(--node-color) 12%,#f7efe1)}body[data-theme="paper"] .connection{stroke:#71695f}body[data-theme="paper"] .connection-label{fill:#4e473f;stroke:#ded7c8}body[data-theme="paper"] .btn,body[data-theme="paper"] .icon-btn{background:#e7dcc9}body[data-theme="paper"] .inspector input,body[data-theme="paper"] .inspector textarea,body[data-theme="paper"] .inspector select{background:#faf5eb;color:#302b25}
body[data-theme="paper"]{background:#cfc2aa}body[data-theme="paper"] .viewport{background-color:#d7c9ad;background-image:radial-gradient(ellipse at 13% 18%,#745c3420 0 1px,transparent 3px),radial-gradient(ellipse at 78% 72%,#6d55301a 0 2px,transparent 5px),radial-gradient(circle at 46% 38%,transparent 0 34%,#765d3510 72%,#59432124 100%),repeating-linear-gradient(2deg,#fff0 0 7px,#5a45230a 8px,#fff0 9px 16px),radial-gradient(#8f7958 1px,transparent 1px);background-size:173px 149px,241px 211px,100% 100%,100% 17px,24px 24px}.viewport[data-paper="true"]{isolation:isolate}body[data-theme="paper"] .viewport::before{content:"";position:absolute;inset:0;z-index:0;pointer-events:none;opacity:.55;mix-blend-mode:multiply;background:repeating-linear-gradient(87deg,transparent 0 3px,#60491f0a 4px,transparent 5px 11px),repeating-linear-gradient(3deg,transparent 0 13px,#ffffff1e 14px,transparent 15px 28px),radial-gradient(ellipse at 0 0,#5943212b,transparent 32%),radial-gradient(ellipse at 100% 100%,#59432130,transparent 38%)}body[data-theme="paper"] .world{z-index:1}body[data-theme="paper"] .topbar{background:linear-gradient(180deg,#eee3cff7,#dfd0b6f2);border-bottom-color:#ad9a7a;box-shadow:0 2px 12px #5b45251c}body[data-theme="paper"] .sidebar,body[data-theme="paper"] .inspector,body[data-theme="paper"] .asset-library,body[data-theme="paper"] .tool-menu,body[data-theme="paper"] .align-toolbar{background:linear-gradient(145deg,#eee3cff7,#dfcfb4f2);border-color:#af9a78;box-shadow:0 18px 45px #59432138,inset 0 0 22px #fff5e22b}body[data-theme="paper"] .tool:hover,body[data-theme="paper"] .tool.active,body[data-theme="paper"] .tool-menu button:hover,body[data-theme="paper"] .theme-menu button.active{background:#8e765123;color:#332719}body[data-theme="paper"] .node{background-color:#eee1c9;background-image:radial-gradient(circle at 12% 18%,#7b5d2d16 0 1px,transparent 2px),repeating-linear-gradient(1deg,#fff0 0 8px,#6d51220b 9px,#fff0 10px 17px),linear-gradient(135deg,#f5ead7,#e5d4b5);border-color:#ab9470;color:#332719;box-shadow:2px 3px 0 #8c75533d,0 14px 28px #5e482738}body[data-theme="paper"] .node h3{font-family:Georgia,"Times New Roman","Noto Serif SC",serif;letter-spacing:.015em}body[data-theme="paper"] .node p{color:#655843}body[data-theme="paper"] .node.note{background-color:#ead7aa;background-image:radial-gradient(circle at 83% 16%,#76552218 0 2px,transparent 4px),repeating-linear-gradient(0deg,transparent 0 21px,#765e3530 22px,#765e3530 23px),linear-gradient(135deg,#f3e3b8,#dfc894)}body[data-theme="paper"] .node.image img{filter:sepia(.13) contrast(.96) saturate(.88)}body[data-theme="paper"] .node-avatar{background:#d8c5a5}body[data-theme="paper"] .connection{stroke:#665237}body[data-theme="paper"] .connection-label{fill:#493a28;stroke:#d7c9ad;stroke-width:6px;font-family:Georgia,"Times New Roman",serif}body[data-theme="paper"] .port{background:#d7c6a8}body[data-theme="paper"] .resize-handle{background:#e3d4ba;border-color:#745f42}body[data-theme="paper"] .btn,body[data-theme="paper"] .icon-btn,body[data-theme="paper"] .zoom-control{background:linear-gradient(#eadfc9,#d9c9ad);border-color:#b29d7c;color:#3d3020}body[data-theme="paper"] .inspector input,body[data-theme="paper"] .inspector textarea,body[data-theme="paper"] .inspector select,body[data-theme="paper"] .asset-library input{background:#f3e8d4;color:#332719;border-color:#b9a27e;box-shadow:inset 0 1px 4px #6b51251c}body[data-theme="paper"] .canvas-hint{color:#66563f}body[data-theme="paper"] .minimap{background:#d8c8acf2;border-color:#a58d68}body[data-theme="paper"] .selection-box{border-color:#765d38;background:#765d3820}
body[data-theme="blueprint"]{--bg:#071725;--panel:#0b2133;--panel2:#102b40;--line:#25465e;--text:#e8f5ff;--muted:#7da0b8;--accent:#5ec8ff;--blue:#5ec8ff;--shadow:0 18px 50px #00101ecc;background:#071725}body[data-theme="blueprint"] .topbar{background:#081b2aF2}body[data-theme="blueprint"] .sidebar,body[data-theme="blueprint"] .inspector,body[data-theme="blueprint"] .asset-library,body[data-theme="blueprint"] .tool-menu,body[data-theme="blueprint"] .align-toolbar{background:#0b2133F2}body[data-theme="blueprint"] .viewport{background-color:#071725;background-image:linear-gradient(#17364b55 1px,transparent 1px),linear-gradient(90deg,#17364b55 1px,transparent 1px);background-size:24px 24px}body[data-theme="blueprint"] .node{background:#0d2639;border-color:#2a536e;box-shadow:0 14px 30px #00101eaa}body[data-theme="blueprint"] .node.note{background:color-mix(in srgb,var(--node-color) 9%,#0d2639)}body[data-theme="blueprint"] .connection{stroke:#6ba8c9}body[data-theme="blueprint"] .connection-label{fill:#bfe7ff;stroke:#071725}body[data-theme="blueprint"] .btn,body[data-theme="blueprint"] .icon-btn{background:#102b40}
.viewport[data-background="dots"]{background-image:radial-gradient(#555861 1px,transparent 1px)!important;background-size:var(--canvas-pattern-size) var(--canvas-pattern-size)!important}
.viewport[data-background="grid"]{background-image:linear-gradient(#55586155 1px,transparent 1px),linear-gradient(90deg,#55586155 1px,transparent 1px)!important;background-size:var(--canvas-pattern-size) var(--canvas-pattern-size)!important}
.viewport[data-background="lines"]{background-image:repeating-linear-gradient(0deg,transparent 0 calc(var(--canvas-pattern-size) - 1px),#55586166 calc(var(--canvas-pattern-size) - 1px) var(--canvas-pattern-size))!important;background-size:100% var(--canvas-pattern-size)!important}
.viewport[data-background="plain"]{background-image:none!important}
.viewport[data-background="caseboard"]{background-color:#29241e!important;background-image:linear-gradient(#17130d1a,#17130d1a),url("./assets/investigation-board.png")!important;background-position:center,center -2vw!important;background-size:100% 100%,100% auto!important;background-repeat:no-repeat!important}
body[data-theme="paper"] .viewport[data-background="dots"]{background-image:radial-gradient(#8f7958 1px,transparent 1px)!important}
body[data-theme="paper"] .viewport[data-background="grid"]{background-image:linear-gradient(#8f795850 1px,transparent 1px),linear-gradient(90deg,#8f795850 1px,transparent 1px)!important}
body[data-theme="paper"] .viewport[data-background="lines"]{background-image:repeating-linear-gradient(0deg,transparent 0 calc(var(--canvas-pattern-size) - 1px),#8f795866 calc(var(--canvas-pattern-size) - 1px) var(--canvas-pattern-size))!important}
body[data-theme="paper"] .viewport:not([data-background="theme"])::before{display:none}
body[data-theme="blueprint"] .viewport[data-background="dots"]{background-image:radial-gradient(#5ec8ff66 1px,transparent 1px)!important}
body[data-theme="blueprint"] .viewport[data-background="grid"]{background-image:linear-gradient(#5ec8ff30 1px,transparent 1px),linear-gradient(90deg,#5ec8ff30 1px,transparent 1px)!important}
body[data-theme="blueprint"] .viewport[data-background="lines"]{background-image:repeating-linear-gradient(0deg,transparent 0 calc(var(--canvas-pattern-size) - 1px),#5ec8ff40 calc(var(--canvas-pattern-size) - 1px) var(--canvas-pattern-size))!important}
body[data-theme="blueprint"] .viewport[data-background="theme"]{background-size:var(--canvas-pattern-size) var(--canvas-pattern-size)}
body[data-theme="paper"] .viewport[data-background="theme"]{background-size:173px 149px,241px 211px,100% 100%,100% 17px,var(--canvas-pattern-size) var(--canvas-pattern-size)}
.prop-menu{top:min(280px,calc(100vh - 380px));width:310px;max-height:calc(100vh - 90px);overflow:auto;display:grid;grid-template-columns:1fr 1fr;gap:4px;padding:9px}.prop-menu[hidden]{display:none}.prop-menu p{grid-column:1/-1;margin:4px 7px 2px;color:#777a84;font-size:9px;font-weight:800;letter-spacing:.14em}.prop-menu button{min-height:54px;padding:8px}.prop-menu .prop-preview{position:relative;flex:0 0 31px;width:31px;height:31px;border-radius:7px}.prop-preview.pin{border-radius:50%;background:radial-gradient(circle at 35% 28%,#fff9 0 8%,#e45a50 28%,#8f201b 72%);box-shadow:0 3px 5px #0008}.prop-preview.pin.yellow{background:radial-gradient(circle at 35% 28%,#fff9 0 8%,#f1c85d 28%,#9f7017 72%)}.prop-preview.tape{height:20px;border-radius:1px;background:linear-gradient(90deg,#ffffff28,#d3b66d99 14%,#ecd493b8 50%,#d3b66d99 86%,#ffffff28);transform:rotate(-5deg)}.prop-preview.label{background:#eee0c5;color:#a8312b;border:1px solid #a8312b;font-family:serif}.prop-preview.label.evidence{color:#966811;border-color:#966811}.prop-preview.stamp{background:transparent;color:#b33b34;border:2px double currentColor;border-radius:2px;font-family:serif;transform:rotate(-5deg)}.prop-preview.stamp.question{transform:rotate(5deg)}.prop-preview.string{height:4px;border:0;border-radius:3px;background:#b43a32;box-shadow:0 1px 3px #0008;transform:rotate(-8deg)}.prop-preview.string.white{background:#f4f2ed}.prop-preview.string.black{background:#24211e;box-shadow:0 0 0 1px #ffffff30,0 1px 3px #0008}
#node-layer .node.prop{min-height:0;background:transparent;border:1px dashed transparent;border-radius:6px;box-shadow:none;overflow:visible}#node-layer .node.prop:hover{border-color:#ffffff45}#node-layer .node.prop.selected{border-color:var(--node-color);outline:1px solid color-mix(in srgb,var(--node-color) 60%,white);box-shadow:0 0 0 3px color-mix(in srgb,var(--node-color) 16%,transparent)}.prop-object{position:absolute;inset:0;display:grid;place-items:center;box-sizing:border-box}.prop-pin{left:12%;top:4%;right:12%;bottom:20%;border-radius:50%;background:radial-gradient(circle at 34% 26%,#fffbd0 0 5%,#ffffff88 6%,var(--node-color) 30%,color-mix(in srgb,var(--node-color) 62%,black) 75%);box-shadow:inset -4px -5px 8px #0005,0 5px 7px #0008;filter:drop-shadow(3px 7px 3px #0008)}.prop-pin i{position:absolute;z-index:-1;left:47%;top:74%;width:8%;height:52%;background:linear-gradient(90deg,#6f7278,#e4e5e7 45%,#777a80);clip-path:polygon(15% 0,85% 0,52% 100%,42% 100%)}.prop-tape{background:linear-gradient(90deg,#ffffff24 0 5%,transparent 9% 91%,#ffffff24 95%),repeating-linear-gradient(87deg,#0000 0 7px,#6d51220b 8px,#fff2 9px 15px),color-mix(in srgb,var(--node-color) 68%,transparent);border:1px solid #fff4;clip-path:polygon(2% 8%,7% 2%,12% 8%,18% 1%,25% 7%,31% 2%,38% 7%,45% 1%,52% 8%,59% 2%,66% 7%,73% 1%,80% 7%,87% 2%,94% 8%,99% 3%,97% 94%,91% 99%,84% 93%,77% 99%,70% 93%,63% 99%,56% 94%,49% 99%,42% 93%,35% 99%,28% 94%,21% 99%,14% 93%,7% 99%,1% 94%);transform:rotate(-3deg);box-shadow:0 5px 8px #0004}.prop-label{grid-template-columns:14px 1fr;padding:7px 12px 7px 8px;background:linear-gradient(135deg,#f4e9d4,#d6c39f);border:2px solid var(--node-color);color:color-mix(in srgb,var(--node-color) 80%,#321);font-family:Georgia,"Noto Serif SC",serif;box-shadow:2px 4px 8px #0007;transform:rotate(-1deg)}.prop-label i{width:9px;height:9px;border-radius:50%;background:radial-gradient(circle at 35% 25%,#fff 0 7%,var(--node-color) 32%,#571a16 85%);box-shadow:0 2px 3px #0007}.prop-label strong{font-size:15px;letter-spacing:.08em;white-space:nowrap}.prop-stamp{inset:6%;border:4px double currentColor;border-radius:3px;color:var(--node-color);font-family:Georgia,"Noto Serif SC",serif;font-size:24px;font-weight:900;letter-spacing:.16em;text-indent:.16em;opacity:.82;transform:rotate(-6deg);text-shadow:1px 1px #fff2;filter:drop-shadow(1px 1px 0 #ffffff12)}.node.prop [contenteditable="true"]{min-width:0;min-height:0;margin:0;padding:1px 3px;background:#fff8;color:inherit;box-shadow:0 0 0 1px currentColor;white-space:nowrap}.node.prop .resize-handle{width:9px;height:9px}.node.prop .resize-handle.nw{left:-6px;top:-6px}.node.prop .resize-handle.ne{right:-6px;top:-6px}.node.prop .resize-handle.sw{left:-6px;bottom:-6px}.node.prop .resize-handle.se{right:-6px;bottom:-6px}
@media(min-width:761px){.sidebar{max-height:calc(100vh - 88px);overflow-y:auto;scrollbar-width:none}.sidebar::-webkit-scrollbar{display:none}}
@media(max-width:760px){.sidebar{max-width:calc(100vw - 16px);overflow-x:auto}.prop-menu{top:auto;bottom:76px;max-height:calc(100vh - 150px)}}
.node-detail-field[hidden]{display:none!important}
body[data-theme] .connection{stroke:var(--line-color,#777b86)}body[data-theme] .connection:hover,body[data-theme] .connection.selected,body[data-theme] .connection-hit:hover+.connection{stroke:var(--accent)}
.prop-preview.pin{position:relative;border:1px solid #ffffff24!important;background:radial-gradient(ellipse at 33% 27%,#fffbd9 0 5%,#ffffffa0 7%,#c54a42 34%,#a32f29 72%,#641816 100%)!important;box-shadow:inset -2px -3px 4px #40110e99,1px 3px 4px #1f140da8!important;transform:scale(.78)}.prop-preview.pin::before{content:"";position:absolute;z-index:1;left:57%;top:76%;width:40%;height:23%;border-radius:50%;background:radial-gradient(ellipse,#e5e6e2 0 18%,#858783 48%,#363735 100%);transform:rotate(27deg);box-shadow:1px 2px 2px #0008}.prop-preview.pin::after{content:"";position:absolute;z-index:2;left:19%;top:15%;width:27%;height:15%;border-radius:50%;background:#ffffff8c;transform:rotate(-25deg)}.prop-preview.pin.yellow{background:radial-gradient(ellipse at 33% 27%,#fffde1 0 5%,#ffffffa0 7%,#e0b747 34%,#b9821f 72%,#704b0d 100%)!important;box-shadow:inset -2px -3px 4px #5b3a0a99,1px 3px 4px #1f140da8!important}
.prop-pin{left:13%;top:12%;right:13%;bottom:14%;z-index:1;border:1px solid #ffffff2b;border-radius:49% 51% 50% 50%;background:radial-gradient(ellipse at 32% 27%,#fffbd7 0 4%,#ffffffa0 6%,var(--node-color) 31%,var(--node-color) 72%,color-mix(in srgb,var(--node-color) 50%,#35110e) 100%);box-shadow:inset -4px -5px 7px color-mix(in srgb,var(--node-color) 38%,#190906),inset 2px 2px 3px #ffffff35,2px 4px 5px #24170fb3;filter:none;transform:perspective(90px) rotateX(-3deg) rotateZ(-2deg)}.prop-pin::before{content:"";position:absolute;z-index:-2;inset:-14%;border-radius:50%;background:radial-gradient(ellipse at 52% 55%,transparent 48%,#6b472b3d 58%,transparent 72%);filter:blur(.5px)}.prop-pin::after{content:"";position:absolute;left:17%;top:14%;width:27%;height:16%;border-radius:50%;background:linear-gradient(135deg,#ffffffc7,#ffffff1a);transform:rotate(-28deg)}.prop-pin i{position:absolute;z-index:-1;left:58%;top:88%;width:34%;height:20%;border-radius:50%;background:radial-gradient(ellipse at 36% 30%,#f3f4ef 0 8%,#a7a9a4 34%,#555754 68%,#272825 100%);clip-path:none;transform:rotate(28deg);box-shadow:1px 2px 3px #160e09aa}
#node-layer .node.image.photo{width:250px;min-height:0;padding:10px 10px 0;background:#f3efe7;background-image:linear-gradient(110deg,#fff8,#ede7dc 55%,#d9d2c7);border:1px solid #cbc4b8;border-radius:3px;box-shadow:2px 4px 0 #3a2b1b24,4px 10px 22px #1b120ba8;transform:rotate(-.45deg);overflow:visible}#node-layer .node.image.photo:hover{border-color:#e8e1d5;box-shadow:2px 4px 0 #3a2b1b24,5px 13px 27px #120c08c2}#node-layer .node.image.photo img{display:block;width:100%;height:calc(100% - 52px);min-height:110px;max-height:none;object-fit:cover;border-radius:1px;background:#bdb8af;filter:saturate(.92) contrast(.98) sepia(.04);box-shadow:inset 0 0 0 1px #0002}#node-layer .node.image.photo .node-body{height:42px;padding:8px 5px 7px;overflow:hidden}#node-layer .node.image.photo .node-kicker{display:none}#node-layer .node.image.photo h3{margin:0;color:#3c3832;font-family:Georgia,"Noto Serif SC",serif;font-size:14px;font-weight:650;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}#node-layer .node.image.photo p{display:none;color:#655f56}#node-layer .node.image.photo.editing p{display:block;background:#f3efe7;color:#655f56}#node-layer .node.image.photo .resize-handle{background:#f3efe7;border-color:#6d665d}
#image-style-field[hidden],#person-style-field[hidden],#note-style-field[hidden],#intel-person-controls[hidden],#circle-person-controls[hidden]{display:none!important}
#node-layer .node.image:not(.photo){overflow:visible;background:#1d1e22}#node-layer .node.image:not(.photo)>img{display:block;width:100%;height:170px;max-height:none;min-height:70px;object-fit:contain;background:#27282d;border-radius:12px 12px 0 0}#node-layer .node.image:not(.photo).resized>img{height:calc(100% - 58px);max-height:none}#node-layer .node.image:not(.photo) .node-body{height:58px;padding:7px 11px 6px;overflow:hidden;border-top:1px solid #34363d}#node-layer .node.image:not(.photo) .node-kicker{display:none}#node-layer .node.image:not(.photo) h3{margin:0 0 2px;font-size:14px;line-height:20px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}#node-layer .node.image:not(.photo) p{display:block;margin:0;color:#92959e;font-size:10px;line-height:15px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}#node-layer .node.image:not(.photo).editing p{display:block;position:relative;margin:0;background:#26272c}

/* 模块旋转：右上角独立手柄，保留四角缩放手柄。 */
#node-layer .node{transform:translate3d(var(--drag-x,0),var(--drag-y,0),0) rotate(var(--node-rotation,0deg));transform-origin:center center}
#node-layer .node.image.photo{transform:translate3d(var(--drag-x,0),var(--drag-y,0),0) rotate(var(--node-rotation,0deg))}
.node.is-moving{will-change:transform;transition:none!important}.node.image.is-moving img{pointer-events:none}
#node-layer .node.selected{outline:3px solid color-mix(in srgb,var(--node-color) 82%,white)!important;outline-offset:5px;box-shadow:0 0 0 6px color-mix(in srgb,var(--node-color) 28%,transparent),0 0 32px color-mix(in srgb,var(--node-color) 72%,transparent),0 18px 44px #000a!important}
.node.person{perspective:900px}.person-flip-shell{position:relative;width:100%;min-height:inherit;height:100%;border-radius:inherit;transform-style:preserve-3d;transition:transform .55s cubic-bezier(.2,.78,.22,1)}.person-face{width:100%;min-height:inherit;border-radius:inherit;backface-visibility:hidden;-webkit-backface-visibility:hidden;overflow:hidden}.person-front{position:relative;height:100%;background:inherit}.person-back{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:14px;transform:rotateY(180deg);background:radial-gradient(circle at 50% 42%,#2f3441 0 16%,#171a21 44%,#090a0e 100%);border:1px solid #ffffff14;color:#eceff7;text-align:center;box-shadow:inset 0 0 45px #000b}.mystery-person .person-flip-shell{transform:rotateY(180deg)}.person-back::before,.person-back::after{content:"";position:absolute;border-radius:50%;pointer-events:none}.person-back::before{width:96px;height:96px;border:1px solid #ffffff1f;box-shadow:0 0 0 8px #ffffff05,0 0 35px #000}.person-back::after{width:78px;height:78px;border:1px dashed color-mix(in srgb,var(--node-color) 70%,#fff);opacity:.55;animation:mystery-ring 9s linear infinite}.person-back>i{position:absolute;inset:7px;border:1px solid #ffffff0d;border-radius:9px;background:repeating-linear-gradient(0deg,transparent 0 7px,#ffffff05 8px,transparent 9px);pointer-events:none}.person-back>span{position:relative;z-index:1;display:grid;place-items:center;width:68px;height:68px;border:2px solid color-mix(in srgb,var(--node-color) 65%,#fff);border-radius:50%;background:radial-gradient(circle at 38% 30%,#505766,#252a34 48%,#101218 100%);box-shadow:inset 0 0 18px #0009,0 0 20px color-mix(in srgb,var(--node-color) 38%,transparent);font:900 45px/1 Georgia,serif;color:#fff;text-shadow:0 0 12px color-mix(in srgb,var(--node-color) 80%,transparent),2px 3px 0 #000}.person-back>strong{position:relative;z-index:1;margin-top:10px;font-size:10px;letter-spacing:.19em;color:color-mix(in srgb,var(--node-color) 72%,#fff)}.person-back>small{position:relative;z-index:1;font-size:7px;letter-spacing:.15em;color:#7f8591}@keyframes mystery-ring{to{transform:rotate(360deg)}}
.relationship-focus-mode .node{transition:opacity .2s,filter .2s,box-shadow .15s,border-color .15s}.relationship-focus-mode .node.relationship-dim{opacity:.14;filter:saturate(.25) brightness(.65)}.relationship-focus-mode .node.relationship-dim:hover{opacity:.5}.relationship-focus-mode .node.relationship-focus{opacity:1;outline:1px solid color-mix(in srgb,var(--node-color) 48%,white);outline-offset:2px}.relationship-focus-mode .node.relationship-focus-source{filter:brightness(1.13) drop-shadow(0 0 14px color-mix(in srgb,var(--node-color) 78%,transparent))}.relationship-focus-mode #line-layer>g.relationship-dim .connection,.relationship-focus-mode #line-layer>g.relationship-dim .connection-label,.relationship-focus-mode #line-layer>g.relationship-dim .connection-pulse{opacity:.05!important}.relationship-focus-mode #line-layer>g.relationship-dim:hover .connection{opacity:.4!important}.relationship-focus-mode #line-layer>g.relationship-focus .connection{opacity:1!important;stroke:var(--accent)!important;stroke-width:calc(var(--line-width,2) + 2px)!important;filter:drop-shadow(0 0 6px color-mix(in srgb,var(--accent) 75%,transparent))}.relationship-focus-mode #line-layer>g.relationship-focus .connection-label{fill:#fff;font-weight:800}
.rotate-handle{position:absolute;z-index:12;right:24px;top:-18px;width:26px;height:26px;border:2px solid #a9abb2;border-radius:50%;background:#1a1b1f;opacity:0;pointer-events:none;cursor:grab;box-shadow:0 4px 12px #0008;transition:opacity .14s ease,transform .14s ease,box-shadow .14s ease,background-color .14s ease}
.rotate-handle::before{display:none}
.rotate-handle::after{content:"↻";position:absolute;inset:-3px;display:grid;place-items:center;color:#e9e9ec;font-size:18px;font-style:normal;font-weight:700}
.node.selected .rotate-handle{opacity:.78;pointer-events:auto}
.node:hover .rotate-handle{opacity:1;pointer-events:auto}
.rotate-handle:hover,.rotate-handle:active{border-color:#fff;background:var(--node-color);transform:scale(1.1);box-shadow:0 0 0 4px color-mix(in srgb,var(--node-color) 22%,transparent),0 5px 16px #0009}
.rotate-handle:active{cursor:grabbing}
body[data-theme="paper"] .rotate-handle{background:#e3d4ba;border-color:#745f42}
.rotation-control{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:2px 0 14px;padding:9px 10px;border:1px solid var(--line);border-radius:9px;background:#ffffff05}
.rotation-control span{color:#858892;font-size:11px}
.layer-control{display:grid;gap:8px;margin:0 0 14px;padding:9px 10px;border:1px solid var(--line);border-radius:9px;background:#ffffff05}.layer-control>span{color:#858892;font-size:11px}.layer-control>div{display:grid;grid-template-columns:1fr 1fr;gap:7px}.layer-control .btn{margin:0;padding:8px 6px}.layer-control .btn:disabled{opacity:.35;cursor:not-allowed}

/* 图钉附着：图钉与被钉模块共同处于画布世界坐标中。 */
#node-layer .node.attached-pin{z-index:auto}
#node-layer .node.pinned-host{box-shadow:0 2px 3px #0008,0 9px 19px #0007}
#node-layer .node.pinned-host::before{content:"";position:absolute;z-index:2;inset:0;border-radius:inherit;pointer-events:none;box-shadow:inset 0 1px 1px #ffffff18,inset 0 -2px 3px #0003}
#node-layer .node.pin-drop-target{outline:2px solid var(--accent);box-shadow:0 0 0 7px #ff725e2b,0 12px 28px #0008}
#node-layer .node.pin-drop-target::after{content:"松开图钉以固定";position:absolute;z-index:10;left:50%;top:-30px;transform:translateX(-50%);padding:4px 8px;border-radius:6px;background:var(--accent);color:#241411;font-size:10px;font-weight:800;white-space:nowrap;pointer-events:none}
body[data-theme="paper"] #node-layer .node.pinned-host{box-shadow:1px 2px 2px #6b51254a,3px 8px 15px #5943213d}
#node-layer .node.prop .rotate-handle{right:2px;top:2px;width:16px;height:16px}
#node-layer .node.prop .rotate-handle::after{font-size:12px}

/* 线索墙属于世界画布：平移、缩放时与模块和图钉使用同一变换。 */
.world::before{content:"";position:absolute;z-index:0;inset:0;pointer-events:none;opacity:0}
.viewport[data-background="caseboard"]{background:#211e1a!important;background-image:none!important}
.viewport[data-background="caseboard"] .world::before{
  opacity:1;
  background-color:#292622;
  background-image:
    url("./assets/investigation-board.png"),
    radial-gradient(ellipse at 14% 22%,#80746418 0 2px,transparent 5px),
    repeating-linear-gradient(87deg,transparent 0 17px,#0000000b 18px,transparent 19px 37px);
  background-position:center center,0 0,0 0;
  background-size:1800px 1200px,330px 270px,100% 41px;
  background-repeat:no-repeat,repeat,repeat;
  box-shadow:inset 0 0 260px #0d0b09a6;
}
.viewport[data-background="caseboard"] .connections,
.viewport[data-background="caseboard"] #node-layer{z-index:1}

/* 无限旧墙：重复纹理锚定世界原点，木板本体仍保留为有限实体。 */
.viewport[data-background="caseboard"]{
  background-color:#24211e!important;
  background-image:
    radial-gradient(ellipse at 18% 24%,#9b91821b 0 1px,transparent 4px),
    radial-gradient(ellipse at 73% 68%,#0908071f 0 2px,transparent 7px),
    repeating-linear-gradient(103deg,transparent 0 17px,#ffffff07 18px,transparent 19px 37px),
    repeating-linear-gradient(7deg,transparent 0 23px,#0000000c 24px,transparent 25px 49px)!important;
  background-position:
    var(--canvas-offset-x,0px) var(--canvas-offset-y,0px),
    var(--canvas-offset-x,0px) var(--canvas-offset-y,0px),
    var(--canvas-offset-x,0px) var(--canvas-offset-y,0px),
    var(--canvas-offset-x,0px) var(--canvas-offset-y,0px)!important;
  background-size:
    var(--wall-size-a,336px) var(--wall-size-a,336px),
    var(--wall-size-b,456px) var(--wall-size-b,456px),
    var(--wall-size-c,192px) var(--wall-size-c,192px),
    var(--wall-size-d,264px) var(--wall-size-d,264px)!important;
  background-repeat:repeat!important;
}
.viewport[data-background="caseboard"] .world::before{
  inset:auto;
  left:2100px;
  top:2400px;
  width:1800px;
  height:1200px;
  background-color:transparent;
  background-image:url("./assets/investigation-board.png");
  background-position:center center;
  background-size:100% 100%;
  background-repeat:no-repeat;
  box-shadow:none;
  -webkit-mask-image:radial-gradient(ellipse 58% 53% at center,#000 70%,#000e 84%,transparent 100%);
  mask-image:radial-gradient(ellipse 58% 53% at center,#000 70%,#000e 84%,transparent 100%);
}

/* 用户提供的俯视磨砂图钉素材。 */
#node-layer .node[data-prop-kind^="pin-"] .prop-pin{
  inset:0;
  border:0;
  border-radius:0;
  background:transparent url("./assets/pushpin-red.png") center/contain no-repeat;
  box-shadow:none;
  transform:none;
  filter:drop-shadow(2px 4px 3px #1b100ba8);
}
#node-layer .node[data-prop-kind="pin-yellow"] .prop-pin{
  filter:hue-rotate(48deg) saturate(.82) brightness(1.18) drop-shadow(2px 4px 3px #1b100ba8);
}
#node-layer .node[data-prop-kind="pin-black"] .prop-pin{
  filter:grayscale(1) brightness(.28) contrast(1.45) drop-shadow(2px 4px 3px #1b100ba8);
}
#node-layer .node[data-prop-kind="pin-blue"] .prop-pin{
  filter:hue-rotate(208deg) saturate(1.15) brightness(.92) drop-shadow(2px 4px 3px #1b100ba8);
}
#node-layer .node[data-prop-kind="pin-green"] .prop-pin{
  filter:hue-rotate(112deg) saturate(.92) brightness(.9) drop-shadow(2px 4px 3px #1b100ba8);
}
#node-layer .node[data-prop-kind^="pin-"] .prop-pin::before,
#node-layer .node[data-prop-kind^="pin-"] .prop-pin::after,
#node-layer .node[data-prop-kind^="pin-"] .prop-pin i{display:none}
.prop-preview.pin{
  border:0!important;
  background:transparent url("./assets/pushpin-red.png") center/contain no-repeat!important;
  box-shadow:none!important;
  transform:scale(.92);
  filter:drop-shadow(1px 2px 2px #160d09a0);
}
.prop-preview.pin::before,.prop-preview.pin::after{display:none}
.prop-preview.pin.yellow{
  background:transparent url("./assets/pushpin-red.png") center/contain no-repeat!important;
  filter:hue-rotate(48deg) saturate(.82) brightness(1.18) drop-shadow(1px 2px 2px #160d09a0);
}
.prop-preview.pin.black{
  background:transparent url("./assets/pushpin-red.png") center/contain no-repeat!important;
  filter:grayscale(1) brightness(.28) contrast(1.45) drop-shadow(1px 2px 2px #160d09a0);
}
.prop-preview.pin.blue{
  background:transparent url("./assets/pushpin-red.png") center/contain no-repeat!important;
  filter:hue-rotate(208deg) saturate(1.15) brightness(.92) drop-shadow(1px 2px 2px #160d09a0);
}
.prop-preview.pin.green{
  background:transparent url("./assets/pushpin-red.png") center/contain no-repeat!important;
  filter:hue-rotate(112deg) saturate(.92) brightness(.9) drop-shadow(1px 2px 2px #160d09a0);
}

/* 2026-07-29：用户提供的 4K 木板框，覆盖线索墙主图与菜单预览。 */
.background-swatch.caseboard{background-image:url("./assets/investigation-board.png?v=20260729-50")}
.viewport[data-background="caseboard"] .world::before{background-image:url("./assets/investigation-board.png?v=20260729-50")}

/* 人物风格：圆形头像。 */
#node-layer .node.person.circle-avatar{
  min-height:0;
  overflow:visible;
  border-color:transparent;
  border-radius:70px;
  background:transparent;
  box-shadow:none;
}
#node-layer .node.person.circle-avatar:hover,
#node-layer .node.person.circle-avatar.selected{
  border-color:color-mix(in srgb,var(--node-color) 58%,transparent);
  background:color-mix(in srgb,#17181c 42%,transparent);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--node-color) 14%,transparent);
}
#node-layer .node.person.circle-avatar .node-head{display:none}
#node-layer .node.person.circle-avatar .node-body{
  display:flex;
  height:100%;
  padding:7px;
  flex-direction:column;
  align-items:center;
  gap:5px;
}
#node-layer .node.person.circle-avatar .node-avatar{
  flex:0 0 auto;
  width:min(112px,calc(100% - 4px));
  height:min(112px,calc(100% - 38px));
  aspect-ratio:1;
  border:4px solid color-mix(in srgb,var(--node-color) 76%,#f4f2ed);
  border-radius:50%;
  object-fit:cover;
  background:color-mix(in srgb,var(--node-color) 18%,#24252a);
  box-shadow:0 8px 20px #0009;
  font-size:34px;
}
#node-layer .node.person.circle-avatar .node-body>div:last-child{width:100%;min-width:0;text-align:center}
#node-layer .node.person.circle-avatar .node-kicker,
#node-layer .node.person.circle-avatar p{display:none}
#node-layer .node.person.circle-avatar h3{
  max-width:100%;
  margin:0 auto;
  padding:4px 10px;
  border:1px solid #ffffff18;
  border-radius:999px;
  overflow:hidden;
  background:#18191de8;
  box-shadow:0 4px 10px #0007;
  color:#f4f2ed;
  font-size:14px;
  line-height:18px;
  white-space:nowrap;
  text-overflow:ellipsis;
}
#node-layer .node.person.circle-avatar.editing p{
  position:absolute;
  z-index:12;
  left:50%;
  top:calc(100% + 8px);
  display:block;
  width:190px;
  min-height:44px;
  transform:translateX(-50%);
  padding:8px 10px;
  border:1px solid var(--node-color);
  border-radius:8px;
  background:#202126;
  color:#d8d9dd;
  box-shadow:0 10px 24px #000a;
  text-align:left;
  white-space:normal;
}
body[data-theme="paper"] #node-layer .node.person.circle-avatar h3{background:#eee1c9;color:#332719;border-color:#ab9470}

/* 正圆版本：模块边界即头像圆周，四个连接点落在圆周基准点。 */
#node-layer .node.person.circle-avatar{border-radius:50%}
#node-layer .node.person.circle-avatar .node-body{position:relative;height:100%;padding:0;gap:0}
#node-layer .node.person.circle-avatar .node-avatar{
  width:100%;
  height:100%;
  max-width:none;
  border-radius:50%;
}
#node-layer .node.person.circle-avatar .node-body>div:last-child{
  position:absolute;
  z-index:4;
  left:9px;
  right:9px;
  bottom:9px;
  width:auto;
}
#node-layer .node.person.circle-avatar h3{padding:3px 8px;font-size:13px;line-height:17px}

/* 圆头像 + 下方姓名：接口仍以头像圆周为准。 */
#node-layer .node.person.circle-avatar,
#node-layer .node.person.circle-avatar:hover,
#node-layer .node.person.circle-avatar.selected{
  border:0;
  border-radius:0;
  outline:none;
  background:transparent;
  box-shadow:none;
}
#node-layer .node.person.circle-avatar .node-body{height:100%;padding:0}
#node-layer .node.person.circle-avatar .node-avatar{
  width:100%;
  height:auto;
  aspect-ratio:1;
  border-radius:50%;
}
#node-layer .node.person.circle-avatar:hover .node-avatar,
#node-layer .node.person.circle-avatar.selected .node-avatar{
  box-shadow:0 0 24px color-mix(in srgb,var(--node-color) 42%,transparent),0 8px 20px #0009;
}
#node-layer .node.person.circle-avatar .node-body>div:last-child{
  left:4px;
  right:4px;
  bottom:0;
}
#node-layer .node.person.circle-avatar h3{background:#18191de8}
#node-layer .node.person.circle-avatar .port.left,
#node-layer .node.person.circle-avatar .port.right{top:calc((100% - 32px)/2 - 7px)}
#node-layer .node.person.circle-avatar .port.bottom{top:calc(100% - 39px);bottom:auto}
#node-layer .node.person.circle-avatar .rotate-handle{
  right:-18px;
  top:14%;
}
#node-layer .node.person.circle-avatar.mystery-person .person-flip-shell{transform:none}
#node-layer .node.person.circle-avatar.mystery-person .person-back{display:none}
#node-layer .node.person.circle-avatar .node-avatar.mystery-avatar{display:grid;place-items:center;background:radial-gradient(circle at 38% 30%,#505766,#252a34 48%,#101218 100%);color:#fff;font:900 56px/1 Georgia,serif;text-shadow:0 0 14px color-mix(in srgb,var(--node-color) 78%,transparent),2px 3px 0 #000;box-shadow:inset 0 0 28px #000b,0 0 0 3px color-mix(in srgb,var(--node-color) 35%,transparent),0 8px 20px #0009}

body[data-theme="paper"] dialog{background:#eee3cf;color:#332719;border-color:#ad9979;box-shadow:0 30px 100px #59432166}
body[data-theme="paper"] .dialog-copy,body[data-theme="paper"] .dialog-actions span,body[data-theme="paper"] .saved-board-card p{color:#75664f}
body[data-theme="paper"] .archive-name-field{color:#65543b}
body[data-theme="paper"] .archive-name-field input{background:#f8efdf;color:#332719;border-color:#b7a17e}
body[data-theme="paper"] .saved-board-card{background:#e5d5ba;border-color:#b8a17c}
body[data-theme="paper"] .saved-board-card:hover{background:#ddc9a8;border-color:#917755}
body[data-theme="paper"] .saved-board-empty b{color:#473925}

/* 四种可切换的便签风格。装饰使用真实子元素，避免与图钉固定状态的伪元素冲突。 */
#note-style-field[hidden]{display:none!important}
#node-layer .node.note{overflow:visible}
#node-layer .node.note .node-body{position:relative;z-index:1;height:100%;min-height:108px}
#node-layer .node.note .note-decoration,#node-layer .node.note .note-fold{position:absolute;z-index:2;display:block;pointer-events:none}
#node-layer .node.note .note-fold{display:none}

/* 1 · 主题自适应：暗夜为磨砂卡片，档案纸为旧纸，蓝图为工程批注。 */
#node-layer .node.note.note-style-adaptive{background-color:#202126;background-image:radial-gradient(circle at 86% 12%,color-mix(in srgb,var(--node-color) 16%,transparent),transparent 34%),linear-gradient(145deg,#25262b,#1b1c20);border-color:#3b3d45;border-radius:12px;color:#f2f1ed;box-shadow:0 15px 34px #0008,inset 0 1px #ffffff0b}
#node-layer .node.note.note-style-adaptive .node-head{position:absolute;z-index:2;left:0;top:0;bottom:0;width:5px;height:auto;border-radius:12px 0 0 12px;background:var(--node-color)}
#node-layer .node.note.note-style-adaptive .node-body{padding:18px 17px 16px 21px}
#node-layer .node.note.note-style-adaptive .note-decoration{right:14px;top:14px;width:28px;height:3px;border-radius:3px;background:var(--node-color);box-shadow:-8px 0 color-mix(in srgb,var(--node-color) 42%,transparent)}
#node-layer .node.note.note-style-adaptive h3{margin:0 0 9px;font-size:17px;line-height:1.25}
#node-layer .node.note.note-style-adaptive p{color:#a9abb3;line-height:1.55}
body[data-theme="paper"] #node-layer .node.note.note-style-adaptive{background-color:#ead7aa;background-image:radial-gradient(circle at 82% 15%,#76552218 0 2px,transparent 4px),repeating-linear-gradient(0deg,transparent 0 21px,#765e3527 22px,#765e3527 23px),linear-gradient(135deg,#f3e3b8,#dfc894);border-color:#aa936c;color:#332719;box-shadow:2px 3px 0 #8c755336,0 14px 28px #5e482738}
body[data-theme="paper"] #node-layer .node.note.note-style-adaptive p{color:#655843}
body[data-theme="blueprint"] #node-layer .node.note.note-style-adaptive{background-color:#0d2639;background-image:linear-gradient(#5ec8ff14 1px,transparent 1px),linear-gradient(90deg,#5ec8ff14 1px,transparent 1px),linear-gradient(145deg,#123149,#0a2032);background-size:18px 18px,18px 18px,100% 100%;border-color:#2d5975;color:#e8f5ff;box-shadow:0 14px 30px #00101eaa,inset 0 0 20px #5ec8ff09}
body[data-theme="blueprint"] #node-layer .node.note.note-style-adaptive p{color:#8eb5cc}

/* 2 · 真实便利贴：纸纤维、胶带和卷角。 */
#node-layer .node.note.note-style-sticky{background-color:color-mix(in srgb,var(--node-color) 10%,#f2d66f);background-image:radial-gradient(ellipse at 14% 17%,#fff7a82d 0 1px,transparent 3px),repeating-linear-gradient(2deg,transparent 0 8px,#725a1810 9px,transparent 10px 17px),linear-gradient(145deg,#fff2a8,color-mix(in srgb,var(--node-color) 10%,#e8c75d));border:1px solid #c9a943;border-radius:2px 2px 15px 3px;color:#3b321e;box-shadow:2px 4px 0 #6c501925,6px 14px 26px #0007}
#node-layer .node.note.note-style-sticky .node-head{display:none}
#node-layer .node.note.note-style-sticky .node-body{padding:27px 18px 18px}
#node-layer .node.note.note-style-sticky .note-decoration{left:50%;top:-7px;width:78px;height:19px;transform:translateX(-50%) rotate(-1.5deg);border-left:1px dashed #806d3a55;border-right:1px dashed #806d3a55;background:linear-gradient(90deg,#fff8,#d7c38a9c 17%,#f2dda4b8 50%,#d7c38a9c 83%,#fff8);box-shadow:0 2px 4px #4d3c1960;opacity:.86}
#node-layer .node.note.note-style-sticky .note-fold{display:block;right:-1px;bottom:-1px;width:30px;height:30px;clip-path:polygon(100% 0,100% 100%,0 100%);border-radius:0 0 13px 0;background:linear-gradient(135deg,#9f8127 0 48%,#ffe99a 51% 100%);filter:drop-shadow(-3px -2px 3px #6c501955)}
#node-layer .node.note.note-style-sticky h3{margin:0 0 8px;color:#332a17;font-family:"KaiTi","STKaiti","Segoe Print",system-ui,sans-serif;font-size:18px}
#node-layer .node.note.note-style-sticky p{color:#5f512d;font-family:"KaiTi","STKaiti",system-ui,sans-serif;font-size:13px;line-height:1.55}

/* 3 · 案件档案卡：旧纸、表格线和证物标记。 */
#node-layer .node.note.note-style-archive{background-color:#e8ddc8;background-image:linear-gradient(90deg,transparent 0 67%,#a3413924 67% calc(67% + 1px),transparent calc(67% + 1px)),repeating-linear-gradient(0deg,transparent 0 23px,#8c7a5b2b 24px,#8c7a5b2b 25px),radial-gradient(circle at 18% 16%,#74572c14 0 1px,transparent 3px),linear-gradient(135deg,#f1e8d7,#d9c9ac);border:1px solid #a99573;border-radius:5px;color:#352d22;box-shadow:2px 3px 0 #60462234,5px 13px 25px #0008,inset 0 0 16px #72532c12}
#node-layer .node.note.note-style-archive .node-head{display:none}
#node-layer .node.note.note-style-archive .node-body{padding:20px 17px 16px}
#node-layer .node.note.note-style-archive .note-decoration{left:16px;top:14px;width:23px;height:23px;border:3px solid color-mix(in srgb,var(--node-color) 72%,#9f342e);border-radius:50%;box-shadow:0 0 0 2px #efe4d0,inset 0 0 0 2px #efe4d0;opacity:.86}
#node-layer .node.note.note-style-archive h3{min-height:25px;margin:0 0 10px;padding:1px 0 6px 35px;border-bottom:1px solid #76624778;color:#3c3123;font-family:Georgia,"Noto Serif SC",serif;font-size:16px;letter-spacing:.04em}
#node-layer .node.note.note-style-archive p{color:#62533e;font-family:Georgia,"Noto Serif SC",serif;font-size:12px;line-height:1.7}

/* 4 · 极简卡片：高留白、低噪声、清晰层级。 */
#node-layer .node.note.note-style-minimal{background:#f2f2ef;border:1px solid #ffffff;border-radius:16px;color:#26272a;box-shadow:0 15px 34px #0007}
#node-layer .node.note.note-style-minimal .node-head{display:none}
#node-layer .node.note.note-style-minimal .node-body{padding:22px 20px 18px}
#node-layer .node.note.note-style-minimal .note-decoration{left:20px;top:15px;width:34px;height:4px;border-radius:4px;background:var(--node-color)}
#node-layer .node.note.note-style-minimal h3{margin:0 0 10px;padding-top:5px;color:#26272a;font:700 17px/1.25 Inter,system-ui,sans-serif;letter-spacing:-.01em}
#node-layer .node.note.note-style-minimal p{color:#6f7178;font:12px/1.6 Inter,system-ui,sans-serif}
body[data-theme="paper"] #node-layer .node.note.note-style-minimal{background:#f7f1e7;border-color:#fff9ec;color:#302b25;box-shadow:0 14px 30px #5943213d}
body[data-theme="paper"] #node-layer .node.note.note-style-minimal h3{color:#302b25;font-family:Inter,system-ui,sans-serif}
body[data-theme="paper"] #node-layer .node.note.note-style-minimal p{color:#756d62;font-family:Inter,system-ui,sans-serif}
body[data-theme="blueprint"] #node-layer .node.note.note-style-minimal{background:#0d2a40;border-color:#2b5874;color:#e8f5ff;box-shadow:0 14px 30px #00101ecc}
body[data-theme="blueprint"] #node-layer .node.note.note-style-minimal h3{color:#e8f5ff}
body[data-theme="blueprint"] #node-layer .node.note.note-style-minimal p{color:#89aec6}

#node-layer .node.note.selected{border-color:var(--node-color)}
#node-layer .node.note.pinned-host{box-shadow:0 2px 3px #0008,0 9px 19px #0007}
body[data-theme="paper"] #node-layer .node.note.pinned-host{box-shadow:1px 2px 2px #6b51254a,3px 8px 15px #5943213d}

/* 2026-08-05：按四款视觉稿重制的便签系统。 */
#node-layer .node.note{
  isolation:isolate;
  min-height:124px;
  overflow:visible;
  border-width:1px;
  border-style:solid;
  transition:border-color .15s,box-shadow .15s,filter .15s;
}
#node-layer .node.note .note-surface{
  position:absolute;
  z-index:0;
  inset:0;
  display:block;
  overflow:hidden;
  border-radius:inherit;
  pointer-events:none;
}
#node-layer .node.note .note-surface::before,
#node-layer .node.note .note-surface::after,
#node-layer .node.note .note-decoration::before,
#node-layer .node.note .note-decoration::after,
#node-layer .node.note .note-fold::before,
#node-layer .node.note .note-fold::after{
  content:"";
  position:absolute;
  display:block;
}
#node-layer .node.note .node-head{position:absolute;z-index:2}
#node-layer .node.note .node-body{
  position:relative;
  z-index:2;
  display:flex;
  flex-direction:column;
  height:100%;
  min-height:122px;
  overflow:hidden;
}
#node-layer .node.note.resized .node-body{min-height:0;max-height:none}
#node-layer .node.note .note-meta,
#node-layer .node.note .note-footer{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:9px;
  pointer-events:none;
}
#node-layer .node.note .note-meta{min-height:13px;font-size:7px;font-weight:850;line-height:1;letter-spacing:.18em;text-transform:uppercase}
#node-layer .node.note .note-meta span::before{content:"CASE NOTE"}
#node-layer .node.note .note-meta b{font:750 7px/1 ui-monospace,SFMono-Regular,Consolas,monospace;letter-spacing:.08em}
#node-layer .node.note .note-footer{margin-top:auto;padding-top:8px;font:700 6px/1 ui-monospace,SFMono-Regular,Consolas,monospace;letter-spacing:.15em;text-transform:uppercase}
#node-layer .node.note .note-footer span::before{content:"MINDBOARD / NOTE"}
#node-layer .node.note .note-footer b{width:22px;height:3px;border-radius:4px}
#node-layer .node.note h3{position:relative;margin:0;letter-spacing:-.015em}
#node-layer .node.note p{position:relative;margin:0;white-space:pre-wrap}

/* 1 · 主题自适应：暗色调查记录卡、档案纸批注、蓝图标记。 */
#node-layer .node.note.note-style-adaptive{
  background:#202329;
  border-color:#3e424b;
  border-radius:10px;
  color:#f5f2eb;
  box-shadow:0 2px 0 #ffffff0a inset,0 18px 34px #0009;
}
#node-layer .node.note.note-style-adaptive .note-surface{
  background:
    radial-gradient(circle at 78% 8%,color-mix(in srgb,var(--node-color) 16%,transparent),transparent 32%),
    linear-gradient(115deg,#ffffff09,transparent 26% 76%,#00000020),
    linear-gradient(150deg,#282b31,#191b20);
}
#node-layer .node.note.note-style-adaptive .note-surface::before{
  inset:0;
  opacity:.22;
  background-image:radial-gradient(#fff 0 .55px,transparent .7px),radial-gradient(#000 0 .6px,transparent .8px);
  background-position:0 0,5px 7px;
  background-size:9px 11px,13px 15px;
  mix-blend-mode:soft-light;
}
#node-layer .node.note.note-style-adaptive .note-surface::after{
  left:13px;
  right:13px;
  bottom:11px;
  height:1px;
  background:linear-gradient(90deg,color-mix(in srgb,var(--node-color) 76%,transparent),transparent 72%);
}
#node-layer .node.note.note-style-adaptive .node-head{
  left:0;
  top:13px;
  bottom:13px;
  width:4px;
  height:auto;
  border-radius:0 4px 4px 0;
  background:var(--node-color);
  box-shadow:0 0 14px color-mix(in srgb,var(--node-color) 42%,transparent);
}
#node-layer .node.note.note-style-adaptive .node-body{padding:14px 16px 12px 19px}
#node-layer .node.note.note-style-adaptive .note-meta{padding-bottom:8px;color:#7f838e;border-bottom:1px solid #ffffff0d}
#node-layer .node.note.note-style-adaptive .note-meta span{color:var(--node-color)}
#node-layer .node.note.note-style-adaptive .note-meta b{color:#777b85}
#node-layer .node.note.note-style-adaptive h3{margin-top:8px;color:#f7f4ee;font-size:16px;line-height:1.2}
#node-layer .node.note.note-style-adaptive p{margin-top:6px;color:#a7aab2;font-size:10px;line-height:1.48}
#node-layer .node.note.note-style-adaptive .note-footer{color:#666a74}
#node-layer .node.note.note-style-adaptive .note-footer b{background:repeating-linear-gradient(90deg,var(--node-color) 0 2px,transparent 2px 4px)}
#node-layer .node.note.note-style-adaptive .note-decoration{
  left:auto;
  right:13px;
  top:13px;
  bottom:auto;
  width:5px;
  height:5px;
  border:1px solid #ffffff32;
  border-radius:50%;
  background:#111318;
  box-shadow:inset 0 0 0 1px #0009,0 1px 3px #0008;
}
body[data-theme="paper"] #node-layer .node.note.note-style-adaptive{
  background:#e7d6b5;
  border-color:#a98e64;
  color:#352a1e;
  box-shadow:1px 2px 0 #fff5 inset,2px 5px 1px #57411d2e,0 18px 30px #4b371e52;
}
body[data-theme="paper"] #node-layer .node.note.note-style-adaptive .note-surface{
  background:radial-gradient(circle at 84% 15%,#7c56221f 0 1px,transparent 3px),repeating-linear-gradient(0deg,transparent 0 20px,#765c3222 21px,#765c3222 22px),linear-gradient(135deg,#f2e4c7,#dbc39b);
}
body[data-theme="paper"] #node-layer .node.note.note-style-adaptive .note-meta{color:#88765e;border-bottom-color:#836b4933}
body[data-theme="paper"] #node-layer .node.note.note-style-adaptive .note-meta b,
body[data-theme="paper"] #node-layer .node.note.note-style-adaptive .note-footer{color:#8a7659}
body[data-theme="paper"] #node-layer .node.note.note-style-adaptive h3{color:#34291c}
body[data-theme="paper"] #node-layer .node.note.note-style-adaptive p{color:#655640}
body[data-theme="blueprint"] #node-layer .node.note.note-style-adaptive{
  background:#0b273b;
  border-color:#2c617f;
  color:#ebf8ff;
  box-shadow:0 1px #7ed6ff14 inset,0 18px 34px #00101ec7;
}
body[data-theme="blueprint"] #node-layer .node.note.note-style-adaptive .note-surface{
  background:linear-gradient(#69cfff12 1px,transparent 1px),linear-gradient(90deg,#69cfff12 1px,transparent 1px),radial-gradient(circle at 76% 16%,#59c7ff20,transparent 32%),linear-gradient(145deg,#123850,#071d2d);
  background-size:16px 16px,16px 16px,100% 100%,100% 100%;
}
body[data-theme="blueprint"] #node-layer .node.note.note-style-adaptive .note-meta{color:#688ba0;border-bottom-color:#70d0ff1c}
body[data-theme="blueprint"] #node-layer .node.note.note-style-adaptive .note-meta b,
body[data-theme="blueprint"] #node-layer .node.note.note-style-adaptive .note-footer{color:#5d8299}
body[data-theme="blueprint"] #node-layer .node.note.note-style-adaptive h3{color:#edf9ff}
body[data-theme="blueprint"] #node-layer .node.note.note-style-adaptive p{color:#92b9d0}

/* 2 · 真实便利贴：纤维纸、半透明撕边胶带、压痕与卷角。 */
#node-layer .node.note.note-style-sticky{
  background:#efd36b;
  border-color:#c5a743;
  border-radius:2px 2px 12px 3px;
  color:#352d1b;
  box-shadow:1px 2px 0 #fff4 inset,4px 5px 1px #5a451a30,8px 20px 30px #0008;
}
#node-layer .node.note.note-style-sticky .note-surface{
  background:radial-gradient(ellipse at 18% 16%,#fff6b44c 0 1px,transparent 3px),radial-gradient(ellipse at 74% 68%,#7a5d1515 0 1px,transparent 3px),repeating-linear-gradient(88deg,#0000 0 6px,#6f53100d 7px,#fff1 8px 14px),linear-gradient(142deg,#fff1a4,#efd36b 58%,#d9b94f);
}
#node-layer .node.note.note-style-sticky .note-surface::before{
  inset:0;
  opacity:.42;
  background-image:radial-gradient(#6b4f12 0 .45px,transparent .7px),radial-gradient(#fff 0 .55px,transparent .8px);
  background-position:2px 3px,7px 8px;
  background-size:11px 13px,15px 17px;
  mix-blend-mode:soft-light;
}
#node-layer .node.note.note-style-sticky .note-surface::after{
  left:12px;
  right:16px;
  bottom:9px;
  height:9px;
  border-radius:50%;
  background:#7558181a;
  filter:blur(5px);
}
#node-layer .node.note.note-style-sticky .node-head{display:none}
#node-layer .node.note.note-style-sticky .node-body{padding:29px 19px 15px}
#node-layer .node.note.note-style-sticky .note-meta,
#node-layer .node.note.note-style-sticky .note-footer{display:none}
#node-layer .node.note.note-style-sticky .note-decoration{
  left:50%;
  right:auto;
  top:-9px;
  bottom:auto;
  width:82px;
  height:22px;
  transform:translateX(-50%) rotate(-1.8deg);
  clip-path:polygon(0 17%,6% 3%,12% 16%,18% 4%,25% 13%,32% 0,39% 14%,46% 3%,54% 15%,61% 4%,68% 13%,75% 1%,82% 14%,89% 3%,100% 16%,97% 88%,89% 100%,82% 87%,74% 98%,66% 86%,58% 100%,50% 87%,42% 98%,34% 85%,26% 99%,18% 86%,10% 98%,2% 87%);
  background:linear-gradient(90deg,#fff7,#d7c48da8 16%,#f2dda9c4 49%,#cdb77ba8 84%,#fff6);
  border:0;
  border-radius:0;
  box-shadow:0 2px 4px #503d1766;
  opacity:.92;
}
#node-layer .node.note.note-style-sticky .note-decoration::before{
  inset:2px 5px;
  background:repeating-linear-gradient(88deg,#fff0 0 8px,#6f56200c 9px,#fff2 10px 15px);
}
#node-layer .node.note.note-style-sticky .note-fold{
  display:block;
  right:-1px;
  bottom:-1px;
  width:31px;
  height:31px;
  overflow:hidden;
  border-radius:0 0 11px 0;
  clip-path:polygon(100% 0,100% 100%,0 100%);
  background:linear-gradient(135deg,#9e7d20 0 47%,#ffe99c 50% 100%);
  filter:drop-shadow(-3px -3px 3px #684f1744);
}
#node-layer .node.note.note-style-sticky .note-fold::after{right:2px;bottom:2px;width:20px;height:8px;border-radius:50%;background:#fff4;filter:blur(3px);transform:rotate(-45deg)}
#node-layer .node.note.note-style-sticky h3{color:#332918;font:700 18px/1.22 "KaiTi","STKaiti","Segoe Print",serif;letter-spacing:.02em}
#node-layer .node.note.note-style-sticky p{margin-top:8px;color:#5e4f2a;font:12px/1.55 "KaiTi","STKaiti",serif}

/* 3 · 案件档案卡：旧纸表格、案件编号和红色证物章。 */
#node-layer .node.note.note-style-archive{
  background:#e8dcc4;
  border-color:#9f8a68;
  border-radius:3px;
  color:#31291e;
  box-shadow:1px 1px #fff6 inset,3px 4px 0 #4f3c2238,8px 19px 30px #0008;
}
#node-layer .node.note.note-style-archive .note-surface{
  background:radial-gradient(circle at 84% 13%,#72522625 0 1px,transparent 4px),radial-gradient(circle at 17% 74%,#7a572319 0 1px,transparent 3px),repeating-linear-gradient(0deg,transparent 0 22px,#7967472b 23px,#7967472b 24px),linear-gradient(90deg,transparent 0 72%,#9949411f 72% calc(72% + 1px),transparent calc(72% + 1px)),linear-gradient(135deg,#f3ead9,#d8c7a8);
}
#node-layer .node.note.note-style-archive .note-surface::before{
  inset:0;
  opacity:.3;
  background-image:radial-gradient(#4e3819 0 .5px,transparent .8px),radial-gradient(#fff 0 .55px,transparent .8px);
  background-position:0 0,6px 9px;
  background-size:13px 17px,17px 19px;
  mix-blend-mode:multiply;
}
#node-layer .node.note.note-style-archive .note-surface::after{left:0;top:0;bottom:0;width:5px;background:linear-gradient(#9d342f,#c16050 58%,#7f2926)}
#node-layer .node.note.note-style-archive .node-head{left:12px;right:12px;top:38px;width:auto;height:1px;border-radius:0;background:#745f4166}
#node-layer .node.note.note-style-archive .node-body{padding:11px 14px 11px 18px}
#node-layer .node.note.note-style-archive .note-meta{min-height:17px;padding:0 53px 7px 0;color:#8d382f;border-bottom:1px double #7f674a66}
#node-layer .node.note.note-style-archive .note-meta span::before{content:"CASE FILE"}
#node-layer .node.note.note-style-archive .note-meta b{color:#75664f}
#node-layer .node.note.note-style-archive h3{margin-top:7px;color:#342a1e;font:700 15px/1.22 Georgia,"Noto Serif SC",serif;letter-spacing:.035em}
#node-layer .node.note.note-style-archive p{margin-top:6px;color:#62533d;font:11px/1.55 Georgia,"Noto Serif SC",serif}
#node-layer .node.note.note-style-archive .note-footer{color:#8a7658}
#node-layer .node.note.note-style-archive .note-footer span::before{content:"EVIDENCE RECORD"}
#node-layer .node.note.note-style-archive .note-footer b{background:repeating-linear-gradient(90deg,#7f6c50 0 1px,transparent 1px 3px)}
#node-layer .node.note.note-style-archive .note-decoration{
  left:auto;
  right:13px;
  top:10px;
  bottom:auto;
  width:39px;
  height:39px;
  border:2px double #a23b34;
  border-radius:50%;
  background:transparent;
  color:#9b352f;
  opacity:.78;
  transform:rotate(8deg);
  box-shadow:inset 0 0 0 2px #a23b3426;
}
#node-layer .node.note.note-style-archive .note-decoration::before{content:"证";inset:5px;display:grid;place-items:center;border:1px solid currentColor;border-radius:50%;font:800 16px/1 "Noto Serif SC",serif}
#node-layer .node.note.note-style-archive .note-decoration::after{content:"EVIDENCE";left:-5px;right:-5px;top:15px;padding:1px 0;background:#e6d8bd;color:#95332e;text-align:center;font:800 5px/1 ui-monospace,monospace;letter-spacing:.08em}
#node-layer .node.note.note-style-archive .note-fold{display:block;right:6px;bottom:5px;width:13px;height:13px;border-right:1px solid #8e795a55;border-bottom:1px solid #8e795a55;opacity:.55}

/* 4 · 极简卡片：参考稿中的高留白、细排版与克制标记。 */
#node-layer .node.note.note-style-minimal{
  background:#f4f3ef;
  border-color:#ffffff;
  border-radius:14px;
  color:#23252a;
  box-shadow:0 1px 0 #fff inset,0 18px 34px #0008;
}
#node-layer .node.note.note-style-minimal .note-surface{background:linear-gradient(150deg,#ffffff,#f2f1ed 68%,#e8e7e2)}
#node-layer .node.note.note-style-minimal .note-surface::before{inset:0;background:linear-gradient(115deg,#fff8,transparent 36% 72%,#c9c8c225)}
#node-layer .node.note.note-style-minimal .note-surface::after{left:17px;right:17px;bottom:11px;height:1px;background:#292b3112}
#node-layer .node.note.note-style-minimal .node-head{display:none}
#node-layer .node.note.note-style-minimal .node-body{padding:13px 17px 12px}
#node-layer .node.note.note-style-minimal .note-meta{padding:0 35px 8px 0;color:#90939a;border-bottom:1px solid #24262a12}
#node-layer .node.note.note-style-minimal .note-meta span::before{content:"NOTE / BRIEF"}
#node-layer .node.note.note-style-minimal .note-meta b{color:#a1a3a8}
#node-layer .node.note.note-style-minimal h3{margin-top:9px;color:#24262b;font:750 16px/1.22 Inter,system-ui,sans-serif;letter-spacing:-.025em}
#node-layer .node.note.note-style-minimal p{margin-top:6px;color:#71747c;font:10px/1.52 Inter,system-ui,sans-serif}
#node-layer .node.note.note-style-minimal .note-footer{color:#a1a3a8}
#node-layer .node.note.note-style-minimal .note-footer span::before{content:"MINDBOARD"}
#node-layer .node.note.note-style-minimal .note-footer b{background:linear-gradient(90deg,var(--node-color) 0 50%,#27292d 50%)}
#node-layer .node.note.note-style-minimal .note-decoration{
  left:auto;
  right:16px;
  top:12px;
  bottom:auto;
  width:18px;
  height:18px;
  border:1px solid #26282d22;
  border-radius:50%;
  background:color-mix(in srgb,var(--node-color) 15%,white);
}
#node-layer .node.note.note-style-minimal .note-decoration::after{inset:6px;border-radius:50%;background:var(--node-color)}
body[data-theme="paper"] #node-layer .node.note.note-style-minimal{background:#f7f0e5;border-color:#fff9ee;box-shadow:0 1px #fff8 inset,0 17px 30px #4a361e4f}
body[data-theme="paper"] #node-layer .node.note.note-style-minimal .note-surface{background:linear-gradient(150deg,#fff9ef,#eee2cf)}
body[data-theme="paper"] #node-layer .node.note.note-style-minimal h3{color:#302b25}
body[data-theme="paper"] #node-layer .node.note.note-style-minimal p{color:#756c60}
body[data-theme="blueprint"] #node-layer .node.note.note-style-minimal{background:#0c2a40;border-color:#32627d;box-shadow:0 1px #7ed6ff13 inset,0 18px 34px #00101ecc}
body[data-theme="blueprint"] #node-layer .node.note.note-style-minimal .note-surface{background:linear-gradient(150deg,#113750,#082237)}
body[data-theme="blueprint"] #node-layer .node.note.note-style-minimal .note-meta{color:#6d93aa;border-bottom-color:#78d3ff20}
body[data-theme="blueprint"] #node-layer .node.note.note-style-minimal .note-meta b,
body[data-theme="blueprint"] #node-layer .node.note.note-style-minimal .note-footer{color:#64879c}
body[data-theme="blueprint"] #node-layer .node.note.note-style-minimal h3{color:#ebf8ff}
body[data-theme="blueprint"] #node-layer .node.note.note-style-minimal p{color:#8fb3c9}

#node-layer .node.note.selected{border-color:var(--node-color);box-shadow:0 0 0 2px color-mix(in srgb,var(--node-color) 25%,transparent),0 18px 36px #0009}
#node-layer .node.note.pinned-host{filter:saturate(.96);box-shadow:1px 2px 1px #0005,3px 9px 18px #0007}
body[data-theme="paper"] #node-layer .node.note.pinned-host{box-shadow:1px 2px 1px #5a421f4a,3px 9px 17px #4e381e4d}

/* 2026-08-05：直接使用用户提供的四款便签原图，不再以 CSS 重绘外观。 */
#node-layer .node.note{
  background:transparent!important;
  border:0;
  border-radius:15px;
  box-shadow:0 18px 30px #0007;
}
#node-layer .node.note.note-style-adaptive{min-height:163px;border-radius:14px}
#node-layer .node.note.note-style-sticky{min-height:195px;border-radius:4px}
#node-layer .node.note.note-style-archive{min-height:144px;border-radius:14px}
#node-layer .node.note.note-style-minimal{min-height:152px;border-radius:15px}
#node-layer .node.note.resized{min-height:80px}
#node-layer .node.note .note-surface{
  inset:0;
  overflow:hidden;
  border-radius:inherit;
  background-color:transparent!important;
  background-image:url("./assets/note-style-reference.png?v=20260805-66")!important;
  background-repeat:no-repeat!important;
  filter:none;
}
#node-layer .node.note.note-style-adaptive .note-surface{background-size:371.78% 295.91%!important;background-position:16.76% 13.48%!important}
#node-layer .node.note.note-style-sticky .note-surface{background-size:389.07% 257.81%!important;background-position:84.15% 9.55%!important}
#node-layer .node.note.note-style-archive .note-surface{background-size:314.47% 281.74%!important;background-position:13.85% 87.81%!important}
#node-layer .node.note.note-style-minimal .note-surface{background-size:340.04% 290.43%!important;background-position:85.18% 87.36%!important}
#node-layer .node.note .note-surface::before,
#node-layer .node.note .note-surface::after,
#node-layer .node.note .node-head,
#node-layer .node.note .note-decoration,
#node-layer .node.note .note-fold,
#node-layer .node.note .note-meta,
#node-layer .node.note .note-footer{display:none!important}
#node-layer .node.note .node-body{
  position:absolute;
  inset:0;
  display:block;
  min-height:0;
  height:auto;
  padding:0;
  overflow:hidden;
  pointer-events:none;
}
#node-layer .node.note h3,
#node-layer .node.note p{
  position:absolute;
  z-index:3;
  left:9%;
  right:9%;
  width:auto;
  max-width:none;
  margin:0;
  padding:2px 4px;
  border-radius:3px;
  pointer-events:auto;
  overflow:hidden;
  text-overflow:ellipsis;
}
#node-layer .node.note h3{white-space:nowrap;font-size:15px;line-height:1.25}
#node-layer .node.note p{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;white-space:pre-wrap;font-size:10px;line-height:1.45}
#node-layer .node.note.note-style-adaptive h3{top:28%;color:#f4f2ed;background:#292a2de8;text-shadow:0 1px 2px #000}
#node-layer .node.note.note-style-adaptive p{top:51%;color:#d5d5d5;background:#292a2dbb;text-shadow:0 1px 1px #000}
#node-layer .node.note.note-style-sticky h3{top:34%;left:12%;right:11%;color:#40391f;background:#f5dc72df;font-family:"KaiTi","STKaiti",serif;text-shadow:0 1px #fff5}
#node-layer .node.note.note-style-sticky p{top:51%;left:12%;right:11%;color:#6d6034;background:#f5dc72b8;font-family:"KaiTi","STKaiti",serif}
#node-layer .node.note.note-style-archive h3{top:17%;left:27%;right:11%;color:#554d3f;background:#eee2cde0;font:700 14px/1.25 Georgia,"Noto Serif SC",serif}
#node-layer .node.note.note-style-archive p{top:43%;left:8%;right:25%;color:#756b59;background:#eee2cda8;font:10px/1.45 Georgia,"Noto Serif SC",serif}
#node-layer .node.note.note-style-minimal h3{top:28%;left:9%;right:11%;color:#424244;background:#f4f1f0e8}
#node-layer .node.note.note-style-minimal p{top:51%;left:9%;right:10%;color:#777477;background:#f4f1f0b8}
#node-layer .node.note.selected{outline:2px solid var(--node-color);outline-offset:3px;box-shadow:0 0 0 5px color-mix(in srgb,var(--node-color) 16%,transparent),0 20px 34px #0008}
#node-layer .node.note.pinned-host{box-shadow:1px 3px 2px #0005,4px 12px 22px #0007}

/* 2026-08-05：四张已抠图、已清空内容的独立透明 PNG。 */
#node-layer .node.note{box-shadow:none}
#node-layer .node.note.note-style-adaptive{min-height:161px;box-shadow:none}
#node-layer .node.note.note-style-sticky{min-height:195px;box-shadow:none}
#node-layer .node.note.note-style-archive{min-height:151px;box-shadow:none}
#node-layer .node.note.note-style-minimal{min-height:156px;box-shadow:none}
#node-layer .node.note.resized{min-height:80px}
#node-layer .node.note .note-surface{
  background-repeat:no-repeat!important;
  background-position:center!important;
  background-size:contain!important;
  overflow:visible;
  filter:drop-shadow(0 12px 13px #0008);
}
#node-layer .node.note.pinned-host .note-surface{filter:drop-shadow(1px 3px 4px #0007)}
#node-layer .node.note.note-style-adaptive .note-surface{
  background-image:url("./assets/note-style-1.png?v=20260806-71")!important;
  background-position:center!important;
  background-size:contain!important;
}
#node-layer .node.note.note-style-sticky .note-surface{
  background-image:url("./assets/note-style-2.png?v=20260806-71")!important;
  background-position:center!important;
  background-size:contain!important;
}
#node-layer .node.note.note-style-archive .note-surface{
  background-image:url("./assets/note-style-3.png?v=20260806-71")!important;
  background-position:center!important;
  background-size:contain!important;
}
#node-layer .node.note.note-style-minimal .note-surface{
  background-image:url("./assets/note-style-4.png?v=20260806-71")!important;
  background-position:center!important;
  background-size:contain!important;
}
#node-layer .node.note h3,
#node-layer .node.note p{
  padding:0;
  background:transparent!important;
  border-radius:0;
  box-shadow:none;
}
#node-layer .node.note.note-style-adaptive h3{top:23%;left:10%;right:10%;color:#f4f2ed;text-shadow:0 1px 2px #000}
#node-layer .node.note.note-style-adaptive p{top:45%;left:10%;right:10%;color:#b9bbc0;text-shadow:0 1px 1px #000}
#node-layer .node.note.note-style-sticky h3{top:24%;left:12%;right:12%;color:#40391f;text-shadow:0 1px #fff4}
#node-layer .node.note.note-style-sticky p{top:43%;left:12%;right:12%;color:#6d6034;text-shadow:none}
#node-layer .node.note.note-style-archive h3{top:16%;left:27%;right:10%;color:#554d3f;text-shadow:none}
#node-layer .node.note.note-style-archive p{top:38%;left:9%;right:25%;color:#756b59;text-shadow:none}
#node-layer .node.note.note-style-minimal h3{top:25%;left:10%;right:10%;color:#424244;text-shadow:none}
#node-layer .node.note.note-style-minimal p{top:45%;left:10%;right:10%;color:#777477;text-shadow:none}
#node-layer .node.note.selected{box-shadow:0 0 0 5px color-mix(in srgb,var(--node-color) 16%,transparent),0 20px 34px #0008}
#node-layer .node.note.pinned-host{box-shadow:none}

/* 便签使用不规则透明素材，选中时不绘制矩形轮廓，避免素材外出现白色细线。 */
#node-layer .node.note{
  border:none!important;
}
#node-layer .node.note.selected{
  outline:none!important;
  box-shadow:none!important;
}

/* 连接点贴合 contain 后真正可见的便签素材边缘。 */
#node-layer .node.note .port.left{left:calc(var(--note-inset-x, 0px) - 7px)}
#node-layer .node.note .port.right{right:calc(var(--note-inset-x, 0px) - 7px)}
#node-layer .node.note .port.top{top:calc(var(--note-inset-y, 0px) - 7px)}
#node-layer .node.note .port.bottom{bottom:calc(var(--note-inset-y, 0px) - 7px)}

/* 所有模块统一使用更容易命中的四角缩放控制点。 */
#node-layer .node .resize-handle{
  width:18px;
  height:18px;
  border:0;
  border-radius:50%;
  background:transparent;
  opacity:0;
  z-index:10;
  touch-action:none;
  transform:none;
}
#node-layer .node .resize-handle::after{
  content:"";
  position:absolute;
  inset:4px;
  border:1px solid #fff;
  border-radius:3px;
  background:var(--node-color);
  box-shadow:0 1px 4px #0009;
  transition:transform .12s,box-shadow .12s;
}
#node-layer .node:hover .resize-handle,
#node-layer .node.selected .resize-handle,
#node-layer .node.is-resizing .resize-handle{opacity:1}
#node-layer .node .resize-handle:hover::after{
  transform:scale(1.28);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--node-color) 25%,transparent),0 2px 6px #000b;
}
#node-layer .node .resize-handle.nw{left:-2px;top:-2px;cursor:nwse-resize}
#node-layer .node .resize-handle.ne{right:-2px;top:-2px;cursor:nesw-resize}
#node-layer .node .resize-handle.sw{left:-2px;bottom:-2px;cursor:nesw-resize}
#node-layer .node .resize-handle.se{right:-2px;bottom:-2px;cursor:nwse-resize}

/* 透明便签的控制点贴着实际纸张四角。 */
#node-layer .node.note .resize-handle.nw{left:calc(var(--note-inset-x, 0px) - 2px);top:calc(var(--note-inset-y, 0px) - 2px)}
#node-layer .node.note .resize-handle.ne{right:calc(var(--note-inset-x, 0px) - 2px);top:calc(var(--note-inset-y, 0px) - 2px)}
#node-layer .node.note .resize-handle.sw{left:calc(var(--note-inset-x, 0px) - 2px);bottom:calc(var(--note-inset-y, 0px) - 2px)}
#node-layer .node.note .resize-handle.se{right:calc(var(--note-inset-x, 0px) - 2px);bottom:calc(var(--note-inset-y, 0px) - 2px)}

/* 2026-08-11：深色网格画布使用的现代“记录”模块，不再限定为便利贴材质。 */
#node-layer .node.note.note-style-intel,
#node-layer .node.note.note-style-analysis,
#node-layer .node.note.note-style-finding{
  min-height:190px;
  border-radius:10px;
  color:#f3f4f5;
}
#node-layer .node.note.note-style-analysis{min-height:200px;border-radius:4px}
#node-layer .node.note:is(.note-style-intel,.note-style-analysis,.note-style-finding) .note-surface{
  background-image:none!important;
  background-position:center!important;
  background-size:auto!important;
  background-repeat:no-repeat!important;
  overflow:hidden;
  filter:drop-shadow(0 14px 17px #000a);
}
#node-layer .node.note:is(.note-style-intel,.note-style-analysis,.note-style-finding) .note-surface::before,
#node-layer .node.note:is(.note-style-intel,.note-style-analysis,.note-style-finding) .note-surface::after{
  display:block!important;
}
#node-layer .node.note:is(.note-style-intel,.note-style-analysis,.note-style-finding) .note-meta,
#node-layer .node.note:is(.note-style-intel,.note-style-analysis,.note-style-finding) .note-footer{
  position:absolute;
  z-index:3;
  display:flex!important;
  left:17px;
  right:17px;
  color:#777b83;
}
#node-layer .node.note .note-meta,
#node-layer .node.note .note-footer,
#node-layer .node.note .node-kicker{display:none!important}
#node-layer .node.note:is(.note-style-intel,.note-style-analysis,.note-style-finding) .note-meta{top:15px}
#node-layer .node.note:is(.note-style-intel,.note-style-analysis,.note-style-finding) .note-footer{bottom:13px;margin:0;padding:0}
#node-layer .node.note:is(.note-style-intel,.note-style-analysis,.note-style-finding) .note-footer span::before{content:"MINDBOARD / RECORD"}
#node-layer .node.note:is(.note-style-intel,.note-style-analysis,.note-style-finding) h3,
#node-layer .node.note:is(.note-style-intel,.note-style-analysis,.note-style-finding) p{
  left:17px;
  right:17px;
  color:#f3f4f5;
  text-shadow:none;
}
#node-layer .node.note:is(.note-style-intel,.note-style-analysis,.note-style-finding) h3{top:18px;font:750 calc(26px * var(--note-title-text-scale,1))/1.22 Inter,system-ui,sans-serif}
#node-layer .node.note:is(.note-style-intel,.note-style-analysis,.note-style-finding) p{top:66px;bottom:17px;display:block;overflow:auto;color:#aeb1b7;font:calc(18px * var(--note-body-text-scale,1))/1.58 Inter,system-ui,sans-serif;-webkit-line-clamp:unset;text-overflow:clip}
#node-layer .node.note [contenteditable="true"]{background:transparent!important;box-shadow:0 0 0 1px color-mix(in srgb,var(--node-color) 74%,white),0 0 0 4px color-mix(in srgb,var(--node-color) 12%,transparent);overflow:auto;text-overflow:clip}
#node-layer .node.note p[contenteditable="true"]{display:block;bottom:17px;-webkit-line-clamp:unset;white-space:pre-wrap}
#node-layer .node.note:is(.note-style-intel,.note-style-analysis,.note-style-finding).selected .note-surface{
  box-shadow:0 0 0 2px var(--record-accent),0 0 0 6px color-mix(in srgb,var(--record-accent) 18%,transparent);
}
#node-layer .node.note:is(.note-style-intel,.note-style-analysis,.note-style-finding).pinned-host .note-surface{filter:drop-shadow(1px 4px 5px #0009)}

/* 5 · 暗色情报卡 */
#node-layer .node.note.note-style-intel{--record-accent:var(--node-color)}
#node-layer .node.note.note-style-intel .note-surface{
  border:1px solid color-mix(in srgb,var(--record-accent) 38%,#50535b);
  border-radius:10px;
  background:
    radial-gradient(circle at 82% 8%,color-mix(in srgb,var(--record-accent) 14%,transparent),transparent 34%),
    linear-gradient(135deg,color-mix(in srgb,var(--record-accent) 7%,#202227f2),#111216f7)!important;
  box-shadow:0 1px #ffffff0b inset;
  backdrop-filter:blur(7px);
}
#node-layer .node.note.note-style-intel .note-surface::before{left:4px;top:12px;bottom:12px;width:4px;border-radius:3px;background:var(--record-accent)}
#node-layer .node.note.note-style-intel .note-surface::after{left:19px;right:16px;top:50px;height:1px;background:#ffffff17}
#node-layer .node.note.note-style-intel .note-meta{left:20px;color:#7f838b}
#node-layer .node.note.note-style-intel .note-meta span::before{content:"INTEL";color:var(--record-accent)}
#node-layer .node.note.note-style-intel .note-footer{left:20px}
#node-layer .node.note.note-style-intel .note-footer b{background:var(--record-accent)}
#node-layer .node.note.note-style-intel h3,
#node-layer .node.note.note-style-intel p{left:20px}

/* 6 · 蓝图分析卡 */
#node-layer .node.note.note-style-analysis{--record-accent:var(--node-color)}
#node-layer .node.note.note-style-analysis .note-surface{
  border:1px solid color-mix(in srgb,var(--record-accent) 52%,#273746);
  border-radius:4px;
  clip-path:polygon(9px 0,calc(100% - 9px) 0,100% 9px,100% calc(100% - 9px),calc(100% - 9px) 100%,9px 100%,0 calc(100% - 9px),0 9px);
  background:
    linear-gradient(color-mix(in srgb,var(--record-accent) 10%,transparent) 1px,transparent 1px),
    linear-gradient(90deg,color-mix(in srgb,var(--record-accent) 10%,transparent) 1px,transparent 1px),
    radial-gradient(circle at 50% 12%,color-mix(in srgb,var(--record-accent) 17%,transparent),transparent 48%),
    linear-gradient(145deg,color-mix(in srgb,var(--record-accent) 9%,#122535f5),#09141df8)!important;
  background-size:18px 18px,18px 18px,100% 100%,100% 100%!important;
}
#node-layer .node.note.note-style-analysis .note-surface::before{inset:12px;background:linear-gradient(var(--record-accent),var(--record-accent)) left top/12px 2px no-repeat,linear-gradient(var(--record-accent),var(--record-accent)) left top/2px 12px no-repeat,linear-gradient(var(--record-accent),var(--record-accent)) right top/12px 2px no-repeat,linear-gradient(var(--record-accent),var(--record-accent)) right top/2px 12px no-repeat,linear-gradient(var(--record-accent),var(--record-accent)) left bottom/12px 2px no-repeat,linear-gradient(var(--record-accent),var(--record-accent)) left bottom/2px 12px no-repeat,linear-gradient(var(--record-accent),var(--record-accent)) right bottom/12px 2px no-repeat,linear-gradient(var(--record-accent),var(--record-accent)) right bottom/2px 12px no-repeat;opacity:.9}
#node-layer .node.note.note-style-analysis .note-surface::after{left:17px;right:17px;top:50px;height:1px;background:color-mix(in srgb,var(--record-accent) 30%,transparent)}
#node-layer .node.note.note-style-analysis .note-meta span::before{content:"ANALYSIS";color:var(--record-accent)}
#node-layer .node.note.note-style-analysis .note-footer b{background:repeating-linear-gradient(90deg,var(--record-accent) 0 3px,transparent 3px 5px)}
#node-layer .node.note.note-style-analysis p{color:#99b7c8}

/* 7 · 警戒结论卡 */
#node-layer .node.note.note-style-finding{--record-accent:var(--node-color)}
#node-layer .node.note.note-style-finding .note-surface{
  border:1px solid color-mix(in srgb,var(--record-accent) 42%,#4b4b4d);
  border-radius:10px;
  background:linear-gradient(145deg,color-mix(in srgb,var(--record-accent) 7%,#202021f7),#101011fa)!important;
}
#node-layer .node.note.note-style-finding .note-surface::before{left:0;right:0;top:0;height:43px;border-radius:9px 9px 0 0;border-bottom:2px solid var(--record-accent);background:repeating-linear-gradient(130deg,transparent 0 8px,color-mix(in srgb,var(--record-accent) 12%,transparent) 8px 10px),linear-gradient(90deg,color-mix(in srgb,var(--record-accent) 22%,#242120),#1a1712)}
#node-layer .node.note.note-style-finding .note-surface::after{left:17px;right:17px;top:51px;height:1px;background:#ffffff17}
#node-layer .node.note.note-style-finding .note-meta{top:16px;color:#8e8066}
#node-layer .node.note.note-style-finding .note-meta span::before{content:"KEY FINDING";color:var(--record-accent)}
#node-layer .node.note.note-style-finding .note-footer b{background:var(--record-accent)}
#node-layer .node.note.note-style-finding h3{top:14px}
#node-layer .node.note.note-style-finding p{top:62px}

/* 人物模块：与三种现代记录卡统一的档案风格。 */
#node-layer .node.person:is(.person-style-intel,.person-style-analysis,.person-style-finding){
  --person-accent:var(--node-color);
  min-width:220px;
  min-height:150px;
  overflow:visible;
  color:#f3f4f5;
  box-shadow:0 14px 28px #0009;
}
#node-layer .node.person:is(.person-style-intel,.person-style-analysis,.person-style-finding) .node-head{
  position:relative;
  height:38px;
  border-radius:inherit;
  border-bottom:1px solid color-mix(in srgb,var(--person-accent) 42%,#ffffff18);
  background:transparent;
}
#node-layer .node.person:is(.person-style-intel,.person-style-analysis,.person-style-finding) .node-head::before,
#node-layer .node.person:is(.person-style-intel,.person-style-analysis,.person-style-finding) .node-head::after{
  position:absolute;
  top:13px;
  font:800 8px/1 ui-monospace,SFMono-Regular,Consolas,monospace;
  letter-spacing:.13em;
}
#node-layer .node.person:is(.person-style-intel,.person-style-analysis,.person-style-finding) .node-head::before{left:16px;color:var(--person-accent)}
#node-layer .node.person:is(.person-style-intel,.person-style-analysis,.person-style-finding) .node-head::after{content:"MINDBOARD / PROFILE";right:15px;color:#757982;font-size:6px}
#node-layer .node.person:is(.person-style-intel,.person-style-analysis,.person-style-finding) .node-body{
  position:relative;
  display:grid;
  grid-template-columns:74px minmax(0,1fr);
  height:calc(100% - 38px);
  min-height:112px;
  gap:14px;
  align-items:center;
  padding:12px 16px 14px;
  overflow:hidden;
}
#node-layer .node.person:is(.person-style-intel,.person-style-analysis,.person-style-finding) .node-avatar{
  width:74px;
  height:88px;
  border:2px solid color-mix(in srgb,var(--person-accent) 74%,#d9dce1);
  border-radius:7px;
  object-fit:cover;
  background:color-mix(in srgb,var(--person-accent) 14%,#1b1d21);
  box-shadow:0 7px 16px #0008,inset 0 0 0 1px #ffffff17;
  color:var(--person-accent);
  font-size:28px;
}
#node-layer .node.person:is(.person-style-intel,.person-style-analysis,.person-style-finding) .node-body>div:last-child{min-width:0}
#node-layer .node.person:is(.person-style-intel,.person-style-analysis,.person-style-finding) .node-kicker{overflow:hidden;color:var(--person-accent);font:800 8px/1.2 ui-monospace,SFMono-Regular,Consolas,monospace;letter-spacing:.1em;text-overflow:ellipsis;white-space:nowrap}
#node-layer .node.person:is(.person-style-intel,.person-style-analysis,.person-style-finding) h3{margin:6px 0 7px;color:#f4f5f6;font:760 18px/1.1 Inter,system-ui,sans-serif;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#node-layer .node.person:is(.person-style-intel,.person-style-analysis,.person-style-finding) p{display:-webkit-box;overflow:hidden;color:#aeb2b9;font:10px/1.45 Inter,system-ui,sans-serif;-webkit-box-orient:vertical;-webkit-line-clamp:3}
#node-layer .node.person:is(.person-style-intel,.person-style-analysis,.person-style-finding).selected{border-color:var(--person-accent);box-shadow:0 0 0 2px var(--person-accent),0 0 0 6px color-mix(in srgb,var(--person-accent) 17%,transparent),0 16px 32px #000a}

#node-layer .node.person.person-style-intel{
  border-color:color-mix(in srgb,var(--person-accent) 38%,#50535b);
  border-radius:10px;
  background:radial-gradient(circle at 84% 10%,color-mix(in srgb,var(--person-accent) 13%,transparent),transparent 37%),linear-gradient(135deg,color-mix(in srgb,var(--person-accent) 7%,#202227),#111216);
  box-shadow:inset 5px 0 var(--person-accent),0 14px 28px #0009;
}
#node-layer .node.person.person-style-intel .node-head::before{content:"PERSON / INTEL"}
#node-layer .node.person.person-style-intel .node-head{height:32px}
#node-layer .node.person.person-style-intel .node-head::before,
#node-layer .node.person.person-style-intel .node-head::after{top:10px}
#node-layer .node.person.person-style-intel .node-body{
  grid-template-columns:min(var(--intel-photo-width,110px),calc(100% - 72px)) minmax(0,1fr);
  height:calc(100% - 32px);
  gap:12px;
  align-items:center;
  padding:8px 14px 10px 18px;
}
#node-layer .node.person.person-style-intel .node-avatar{width:100%;height:min(calc(var(--intel-photo-width,110px) * .95),100%);min-height:72px}
#node-layer .node.person.person-style-intel .node-kicker{font-size:var(--intel-kicker-size,8px)}
#node-layer .node.person.person-style-intel h3{font-size:var(--intel-title-size,17px);margin:5px 0 6px}
#node-layer .node.person.person-style-intel p{font-size:var(--intel-body-size,10px);-webkit-line-clamp:2}
.style-size-controls{margin:-2px 0 14px;padding:11px 11px 1px;border:1px solid #30323a;border-radius:9px;background:#15161a}.style-size-controls label{margin-bottom:11px}
.style-size-controls .reset-size-btn{width:100%;margin:0 0 10px;padding:8px 10px}

#node-layer .node.person.person-style-analysis{
  border-color:color-mix(in srgb,var(--person-accent) 52%,#273746);
  border-radius:4px;
  background:linear-gradient(color-mix(in srgb,var(--person-accent) 10%,transparent) 1px,transparent 1px),linear-gradient(90deg,color-mix(in srgb,var(--person-accent) 10%,transparent) 1px,transparent 1px),radial-gradient(circle at 50% 8%,color-mix(in srgb,var(--person-accent) 16%,transparent),transparent 52%),linear-gradient(145deg,color-mix(in srgb,var(--person-accent) 9%,#122535),#09141d);
  background-size:18px 18px,18px 18px,100% 100%,100% 100%;
}
#node-layer .node.person.person-style-analysis .node-head::before{content:"PERSON / ANALYSIS"}
#node-layer .node.person.person-style-analysis .node-avatar{border-radius:2px;clip-path:polygon(8px 0,100% 0,100% calc(100% - 8px),calc(100% - 8px) 100%,0 100%,0 8px)}
#node-layer .node.person.person-style-analysis p{color:#9cb8c8}

#node-layer .node.person.person-style-finding{
  border-color:color-mix(in srgb,var(--person-accent) 42%,#4b4b4d);
  border-radius:10px;
  background:linear-gradient(145deg,color-mix(in srgb,var(--person-accent) 7%,#202021),#101011);
}
#node-layer .node.person.person-style-finding .node-head{border-bottom:2px solid var(--person-accent);background:repeating-linear-gradient(130deg,transparent 0 8px,color-mix(in srgb,var(--person-accent) 12%,transparent) 8px 10px),linear-gradient(90deg,color-mix(in srgb,var(--person-accent) 22%,#242120),#1a1712)}
#node-layer .node.person.person-style-finding .node-head::before{content:"PERSON / KEY FINDING"}
#node-layer .node.person.person-style-finding .node-avatar{border-bottom-width:5px}

/* 图片模块：与记录卡、人物卡一致的三种证据图片风格。 */
#node-layer .node.image:is(.image-style-intel,.image-style-analysis,.image-style-finding){
  --image-accent:var(--node-color);
  min-width:220px;
  min-height:210px;
  overflow:visible;
  border-color:color-mix(in srgb,var(--image-accent) 40%,#4b4e55);
  color:#f3f4f5;
  box-shadow:0 14px 28px #0009;
}
#node-layer .node.image:is(.image-style-intel,.image-style-analysis,.image-style-finding) img,
#node-layer .node.image:is(.image-style-intel,.image-style-analysis,.image-style-finding) .node-placeholder{
  display:block;
  width:calc(100% - 20px);
  height:calc(100% - 78px);
  min-height:132px;
  max-height:none;
  margin:10px 10px 0;
  border:1px solid color-mix(in srgb,var(--image-accent) 55%,#81848b);
  border-radius:6px;
  object-fit:cover;
  background:color-mix(in srgb,var(--image-accent) 8%,#202329);
  box-shadow:inset 0 0 0 1px #0007;
}
#node-layer .node.image:is(.image-style-intel,.image-style-analysis,.image-style-finding) .node-body{
  position:relative;
  height:68px;
  max-height:none;
  padding:8px 14px 10px;
  overflow:hidden;
}
#node-layer .node.image:is(.image-style-intel,.image-style-analysis,.image-style-finding) .node-kicker{height:10px;overflow:hidden;color:var(--image-accent);font-size:0;line-height:10px;letter-spacing:.12em}
#node-layer .node.image:is(.image-style-intel,.image-style-analysis,.image-style-finding) .node-kicker::before{font:800 7px/10px ui-monospace,SFMono-Regular,Consolas,monospace}
#node-layer .node.image:is(.image-style-intel,.image-style-analysis,.image-style-finding) h3{margin:2px 0 1px;overflow:hidden;color:#f3f4f5;font:750 14px/1.25 Inter,system-ui,sans-serif;text-overflow:ellipsis;white-space:nowrap}
#node-layer .node.image:is(.image-style-intel,.image-style-analysis,.image-style-finding) p{display:block;overflow:hidden;color:#9297a0;font:9px/1.25 Inter,system-ui,sans-serif;text-overflow:ellipsis;white-space:nowrap}
#node-layer .node.image:is(.image-style-intel,.image-style-analysis,.image-style-finding).selected{border-color:var(--image-accent);box-shadow:0 0 0 2px var(--image-accent),0 0 0 6px color-mix(in srgb,var(--image-accent) 17%,transparent),0 16px 32px #000a}

#node-layer .node.image.image-style-intel{
  border-radius:10px;
  background:radial-gradient(circle at 86% 8%,color-mix(in srgb,var(--image-accent) 13%,transparent),transparent 35%),linear-gradient(135deg,color-mix(in srgb,var(--image-accent) 7%,#202227),#111216);
  box-shadow:inset 5px 0 var(--image-accent),0 14px 28px #0009;
}
#node-layer .node.image.image-style-intel .node-kicker::before{content:"IMAGE / INTEL"}
#node-layer .node.image.image-style-intel img,
#node-layer .node.image.image-style-intel .node-placeholder{margin-left:14px;width:calc(100% - 24px)}

#node-layer .node.image.image-style-analysis{
  border-radius:4px;
  background:linear-gradient(color-mix(in srgb,var(--image-accent) 10%,transparent) 1px,transparent 1px),linear-gradient(90deg,color-mix(in srgb,var(--image-accent) 10%,transparent) 1px,transparent 1px),radial-gradient(circle at 50% 8%,color-mix(in srgb,var(--image-accent) 16%,transparent),transparent 52%),linear-gradient(145deg,color-mix(in srgb,var(--image-accent) 9%,#122535),#09141d);
  background-size:18px 18px,18px 18px,100% 100%,100% 100%;
}
#node-layer .node.image.image-style-analysis .node-kicker::before{content:"IMAGE / ANALYSIS"}
#node-layer .node.image.image-style-analysis img,
#node-layer .node.image.image-style-analysis .node-placeholder{border-radius:2px;clip-path:polygon(9px 0,100% 0,100% calc(100% - 9px),calc(100% - 9px) 100%,0 100%,0 9px)}
#node-layer .node.image.image-style-analysis p{color:#91afc0}

#node-layer .node.image.image-style-finding{
  border-radius:10px;
  background:linear-gradient(145deg,color-mix(in srgb,var(--image-accent) 7%,#202021),#101011);
}
#node-layer .node.image.image-style-finding img,
#node-layer .node.image.image-style-finding .node-placeholder{border-bottom:4px solid var(--image-accent);border-radius:7px 7px 2px 2px}
#node-layer .node.image.image-style-finding .node-body{background:repeating-linear-gradient(130deg,transparent 0 8px,color-mix(in srgb,var(--image-accent) 10%,transparent) 8px 10px),linear-gradient(90deg,color-mix(in srgb,var(--image-accent) 18%,#242120),#151414)}
#node-layer .node.image.image-style-finding .node-kicker::before{content:"IMAGE / KEY FINDING"}

/* Alt + 单击人物：统一切换为灰色圆形问号。 */
#node-layer .node.person.circle-avatar .node-avatar.mystery-avatar{position:relative;display:block;overflow:hidden;background:#56595f;color:#000;font:inherit;box-shadow:none;text-shadow:none;filter:none}
#node-layer .node.person.square-avatar .node-avatar{border-radius:14px}
#node-layer .node.person.square-avatar .node-avatar.mystery-avatar{border-radius:14px}
#node-layer .node.person.circle-avatar .mystery-question-mark,
#node-layer .node.person.circle-avatar .mystery-question-mark text{display:block;width:100%;height:100%;fill:#000;text-shadow:none;filter:none}
#node-layer .node.person.circle-avatar .mystery-question-mark text{font-family:"Arial Black",Arial,Helvetica,sans-serif;font-size:92px;font-weight:400}

/* 人物悬浮提示：比选中态更轻，圆形头像沿圆周发光。 */
#node-layer .node.person:not(.circle-avatar):not(.selected):hover{
  border-color:color-mix(in srgb,var(--node-color) 76%,#fff);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--node-color) 24%,transparent),0 0 28px color-mix(in srgb,var(--node-color) 55%,transparent),0 13px 30px #0006;
}
#node-layer .node.person.circle-avatar .node-avatar{transition:box-shadow .16s ease}
#node-layer .node.person.circle-avatar:not(.selected):hover .node-avatar{
  box-shadow:0 0 29px color-mix(in srgb,var(--node-color) 62%,transparent),0 8px 20px #0008;
}
#node-layer .node.person.circle-avatar.selected .node-avatar{
  box-shadow:0 0 32px color-mix(in srgb,var(--node-color) 68%,transparent),0 8px 20px #0008;
}
#node-layer .node.person.circle-avatar{
  content-visibility:visible;
  contain:none;
}
#node-layer .node.person.circle-avatar .person-flip-shell,
#node-layer .node.person.circle-avatar .person-face,
#node-layer .node.person.circle-avatar .person-front,
#node-layer .node.person.circle-avatar.resized .node-body{
  max-height:none;
  overflow:visible;
}
#node-layer .node.person img.node-avatar{
  transition:filter .16s ease,box-shadow .16s ease;
}
#node-layer .node.person:hover img.node-avatar{
  filter:brightness(1.2) saturate(1.08);
}

/* 2026-08-18 · 晨雾：面向通用人物关系梳理的轻盈编辑主题。 */
.theme-swatch.morning{
  background:
    radial-gradient(circle at 26% 24%,#fff 0 12%,transparent 13%),
    linear-gradient(135deg,#f8f5ff 0 46%,#cfc8f2 47% 68%,#efc9ad 69% 100%);
}
body[data-theme="morning"]{
  --bg:#eceaf2;
  --panel:#fbfaff;
  --panel2:#f2eff8;
  --line:#d8d2e3;
  --text:#2d2938;
  --muted:#777184;
  --accent:#7464df;
  --blue:#568fc9;
  --shadow:0 18px 48px #55476a24;
  background:#eceaf2;
  color:var(--text);
}
body[data-theme="morning"] .topbar{
  background:linear-gradient(180deg,#fffefdF2,#f8f5fcE8);
  border-bottom-color:#d8d2e3;
  box-shadow:0 3px 20px #57476c12;
}
body[data-theme="morning"] .brand-mark{
  color:#fff;
  background:linear-gradient(145deg,#8878ed,#6757d2);
  box-shadow:0 7px 18px #7464df36,0 0 0 4px #7464df12;
}
body[data-theme="morning"] .save-state{color:#8a8394}
body[data-theme="morning"] .sidebar,
body[data-theme="morning"] .inspector,
body[data-theme="morning"] .asset-library,
body[data-theme="morning"] .tool-menu,
body[data-theme="morning"] .align-toolbar{
  background:linear-gradient(145deg,#fffefaF2,#f5f1faEC);
  border-color:#d9d2e5;
  box-shadow:0 18px 48px #57476a22,inset 0 1px #fff;
  backdrop-filter:blur(18px) saturate(1.12);
}
body[data-theme="morning"] .tool{color:#787282}
body[data-theme="morning"] .tool:hover,
body[data-theme="morning"] .tool.active{
  color:#443b67;
  background:#7464df12;
}
body[data-theme="morning"] .tool.active{box-shadow:inset 3px 0 #7464df}
body[data-theme="morning"] .tool-menu button:hover,
body[data-theme="morning"] .theme-menu button.active,
body[data-theme="morning"] .background-menu button.active{
  color:#332d47;
  background:#7464df12;
}
body[data-theme="morning"] .tool-menu small,
body[data-theme="morning"] .eyebrow,
body[data-theme="morning"] .inspector label{color:#8b8494}
body[data-theme="morning"] .btn,
body[data-theme="morning"] .icon-btn,
body[data-theme="morning"] .zoom-control{
  color:#474052;
  border-color:#d8d2e3;
  background:#f7f4fa;
  box-shadow:0 1px #fff inset;
}
body[data-theme="morning"] .btn:hover,
body[data-theme="morning"] .icon-btn:hover{background:#eeeaf5}
body[data-theme="morning"] .btn.accent{
  color:#fff;
  border-color:#7464df;
  background:linear-gradient(135deg,#8373e9,#6858d2);
}
body[data-theme="morning"] .btn.upload-btn{color:#5c4fa1;border-color:#cfc7ea;background:#f2effc}
body[data-theme="morning"] .btn.save-btn{color:#3f765b;border-color:#bfddca;background:#edf8f1}
body[data-theme="morning"] .btn.load-btn{color:#4f618f;border-color:#c9d3ec;background:#f0f4fc}
body[data-theme="morning"] .viewport{
  background-color:#eceaf2;
}
body[data-theme="morning"] .viewport[data-background="theme"]{
  background-image:
    radial-gradient(circle at 16% 14%,#ffffffd9 0,transparent 34%),
    radial-gradient(circle at 86% 78%,#f2cdb14d 0,transparent 31%),
    linear-gradient(#766b9820 1px,transparent 1px),
    linear-gradient(90deg,#766b9820 1px,transparent 1px);
  background-size:100% 100%,100% 100%,var(--canvas-pattern-size) var(--canvas-pattern-size),var(--canvas-pattern-size) var(--canvas-pattern-size);
}
body[data-theme="morning"] .background-swatch.theme{
  background-image:linear-gradient(135deg,#f9f7ff 0 52%,#cfc8f2 53% 72%,#efc9ad 73%);
}
body[data-theme="morning"] .viewport[data-background="dots"]{background-image:radial-gradient(#81779d6b 1px,transparent 1px)!important}
body[data-theme="morning"] .viewport[data-background="grid"]{background-image:linear-gradient(#81779d2e 1px,transparent 1px),linear-gradient(90deg,#81779d2e 1px,transparent 1px)!important}
body[data-theme="morning"] .viewport[data-background="lines"]{background-image:repeating-linear-gradient(0deg,transparent 0 calc(var(--canvas-pattern-size) - 1px),#81779d38 calc(var(--canvas-pattern-size) - 1px) var(--canvas-pattern-size))!important}
body[data-theme="morning"] .viewport.dragover::after{content:"释放图片，收入素材库";color:#564a8c;background:#7464df12}
body[data-theme="morning"] .node{
  color:#302b3b;
  border-color:#d9d3e2;
  background:linear-gradient(145deg,#fffefd,#f4f1f7);
  box-shadow:0 14px 32px #594a6a22,0 1px #fff inset;
}
body[data-theme="morning"] .node:hover{border-color:color-mix(in srgb,var(--node-color) 48%,#c7bfd2)}
body[data-theme="morning"] .node.selected{
  outline:none;
  border-color:var(--node-color);
  box-shadow:0 0 0 4px color-mix(in srgb,var(--node-color) 15%,transparent),0 18px 38px #594a6a2b;
}
body[data-theme="morning"] .node p{color:#77717f}
body[data-theme="morning"] .node-avatar{
  color:var(--node-color);
  background:color-mix(in srgb,var(--node-color) 11%,#f0edf5);
}
body[data-theme="morning"] .node.image img{background:#e7e3ec}
body[data-theme="morning"] .node-placeholder{color:#8b8395;border-color:#d5cede;background:linear-gradient(135deg,#f6f3f8,#e9e4ee)}
body[data-theme="morning"] .node.image.editing p{background:#f7f4fa}
body[data-theme="morning"] .port,
body[data-theme="morning"] .line-endpoint{background:#f7f4fa}
body[data-theme="morning"] .resize-handle::after{border-color:#fff;box-shadow:0 2px 6px #5e4d762e}
body[data-theme="morning"] .rotate-handle{color:#51486c;border-color:#cfc7da;background:#f7f4fa;box-shadow:0 4px 12px #54446a24}
body[data-theme="morning"] .rotate-handle::after{color:#51486c}
body[data-theme="morning"] .connection{stroke:var(--line-color,#77708d)}
body[data-theme="morning"] .connection-label{fill:#4c455b;stroke:#eceaf2;stroke-width:6px}
body[data-theme="morning"] .connection:hover,
body[data-theme="morning"] .connection.selected,
body[data-theme="morning"] .connection-hit:hover+.connection{stroke:var(--accent)}
body[data-theme="morning"] .selection-box{border-color:#7464df;background:#7464df16;box-shadow:0 0 0 1px #fff9 inset}
body[data-theme="morning"] .smart-align-guide{background:#7464df;box-shadow:0 0 7px #7464df80}
body[data-theme="morning"] .pair-relationship-card{
  color:#302b3b;
  background:#fffdf8f2;
  border-color:#cfc7df;
  box-shadow:0 18px 48px #58486d30;
}
body[data-theme="morning"] .pair-relation-item{background:#f5f1f8;border-color:#ddd6e5}
body[data-theme="morning"] .pair-relation-name,
body[data-theme="morning"] .pair-relation-description{color:#393342;background:#ffffffa3}
body[data-theme="morning"] .pair-relation-description{color:#776f80}
body[data-theme="morning"] .inspector input,
body[data-theme="morning"] .inspector textarea,
body[data-theme="morning"] .inspector select,
body[data-theme="morning"] .asset-library input,
body[data-theme="morning"] #ai-dialog textarea{
  color:#37313f;
  border-color:#d8d1e1;
  background:#fffefd;
  box-shadow:inset 0 1px 3px #5a4a6a0c;
}
body[data-theme="morning"] .asset-drop,
body[data-theme="morning"] .asset-card,
body[data-theme="morning"] .style-size-controls{
  color:#4c4557;
  border-color:#d8d1e1;
  background:#f5f1f8;
}
body[data-theme="morning"] dialog{
  color:#302b3b;
  border-color:#d8d1e1;
  background:linear-gradient(145deg,#fffefa,#f4f0f8);
  box-shadow:0 30px 90px #4c3e5e38;
}
body[data-theme="morning"] .saved-board-card{border-color:#ddd5e5;background:#f5f1f8}
body[data-theme="morning"] .saved-board-card:hover{border-color:#bfb4d3;background:#eee8f4}
body[data-theme="morning"] .toast{color:#fff;background:#4d4658;border-color:#71677e}
body[data-theme="morning"] .minimap{border-color:#d2cadc;background:#f7f4fae8;box-shadow:0 12px 32px #594a6a20}

/* 晨雾主题下，三类卡片转为人物记录、关系分析与关键摘要。 */
body[data-theme="morning"] #node-layer .node.note:is(.note-style-intel,.note-style-analysis,.note-style-finding){color:#302b3b}
body[data-theme="morning"] #node-layer .node.note:is(.note-style-intel,.note-style-analysis,.note-style-finding) .note-surface{filter:drop-shadow(0 14px 17px #594a6a24)}
body[data-theme="morning"] #node-layer .node.note:is(.note-style-intel,.note-style-analysis,.note-style-finding) h3{color:#332d3f}
body[data-theme="morning"] #node-layer .node.note:is(.note-style-intel,.note-style-analysis,.note-style-finding) p{color:#746e7d}
body[data-theme="morning"] #node-layer .node.note:is(.note-style-intel,.note-style-analysis,.note-style-finding) .note-meta,
body[data-theme="morning"] #node-layer .node.note:is(.note-style-intel,.note-style-analysis,.note-style-finding) .note-footer{color:#968da0}
body[data-theme="morning"] #node-layer .node.note.note-style-intel .note-surface{
  border-color:color-mix(in srgb,var(--record-accent) 31%,#d6cfdd);
  background:radial-gradient(circle at 84% 8%,color-mix(in srgb,var(--record-accent) 10%,transparent),transparent 36%),linear-gradient(145deg,#fffefd,#f1edf5)!important;
  box-shadow:0 1px #fff inset;
}
body[data-theme="morning"] #node-layer .node.note.note-style-intel .note-surface::after{background:#5b526017}
body[data-theme="morning"] #node-layer .node.note.note-style-intel .note-meta span::before{content:"PROFILE NOTE"}
body[data-theme="morning"] #node-layer .node.note.note-style-analysis .note-surface{
  border-color:color-mix(in srgb,var(--record-accent) 38%,#cfc8db);
  background:linear-gradient(color-mix(in srgb,var(--record-accent) 8%,transparent) 1px,transparent 1px),linear-gradient(90deg,color-mix(in srgb,var(--record-accent) 8%,transparent) 1px,transparent 1px),radial-gradient(circle at 50% 12%,color-mix(in srgb,var(--record-accent) 11%,transparent),transparent 48%),linear-gradient(145deg,#f9fbff,#e9edf6)!important;
  background-size:18px 18px,18px 18px,100% 100%,100% 100%!important;
}
body[data-theme="morning"] #node-layer .node.note.note-style-analysis .note-meta span::before{content:"CONTEXT MAP"}
body[data-theme="morning"] #node-layer .node.note.note-style-finding .note-surface{
  border-color:color-mix(in srgb,var(--record-accent) 34%,#d4ccd9);
  background:linear-gradient(145deg,#fffdf8,#f5eee9)!important;
}
body[data-theme="morning"] #node-layer .node.note.note-style-finding .note-surface::before{
  background:repeating-linear-gradient(130deg,transparent 0 9px,color-mix(in srgb,var(--record-accent) 7%,transparent) 9px 11px),linear-gradient(90deg,color-mix(in srgb,var(--record-accent) 13%,#f1e6df),#f8f1ec);
}
body[data-theme="morning"] #node-layer .node.note.note-style-finding .note-surface::after{background:#5b526017}
body[data-theme="morning"] #node-layer .node.note.note-style-finding .note-meta span::before{content:"KEY INSIGHT"}

/* 晨雾主题下的人物与图片风格沿用同一套浅色卡片语言。 */
body[data-theme="morning"] #node-layer .node.person:is(.person-style-intel,.person-style-analysis,.person-style-finding),
body[data-theme="morning"] #node-layer .node.image:is(.image-style-intel,.image-style-analysis,.image-style-finding){
  color:#302b3b;
  border-color:color-mix(in srgb,var(--node-color) 31%,#d4cddc);
  box-shadow:0 14px 30px #594a6a27;
}
body[data-theme="morning"] #node-layer .node.person:is(.person-style-intel,.person-style-analysis,.person-style-finding).selected,
body[data-theme="morning"] #node-layer .node.image:is(.image-style-intel,.image-style-analysis,.image-style-finding).selected{
  outline:none;
  border-color:var(--node-color);
  box-shadow:0 0 0 4px color-mix(in srgb,var(--node-color) 16%,transparent),0 18px 38px #594a6a2d;
}
body[data-theme="morning"] #node-layer .node.person:is(.person-style-intel,.person-style-analysis,.person-style-finding) .node-head{border-bottom-color:color-mix(in srgb,var(--person-accent) 28%,#d9d1df)}
body[data-theme="morning"] #node-layer .node.person:is(.person-style-intel,.person-style-analysis,.person-style-finding) .node-head::after{color:#98909f}
body[data-theme="morning"] #node-layer .node.person:is(.person-style-intel,.person-style-analysis,.person-style-finding) h3,
body[data-theme="morning"] #node-layer .node.image:is(.image-style-intel,.image-style-analysis,.image-style-finding) h3{color:#332d3f}
body[data-theme="morning"] #node-layer .node.person:is(.person-style-intel,.person-style-analysis,.person-style-finding) p,
body[data-theme="morning"] #node-layer .node.image:is(.image-style-intel,.image-style-analysis,.image-style-finding) p{color:#77707f}
body[data-theme="morning"] #node-layer .node.person:is(.person-style-intel,.person-style-analysis,.person-style-finding) .node-avatar,
body[data-theme="morning"] #node-layer .node.image:is(.image-style-intel,.image-style-analysis,.image-style-finding) img,
body[data-theme="morning"] #node-layer .node.image:is(.image-style-intel,.image-style-analysis,.image-style-finding) .node-placeholder{
  border-color:color-mix(in srgb,var(--node-color) 48%,#d5cedd);
  background:color-mix(in srgb,var(--node-color) 8%,#f1edf5);
  box-shadow:inset 0 0 0 1px #fff9,0 6px 16px #594a6a1f;
}
body[data-theme="morning"] #node-layer .node.person.person-style-intel,
body[data-theme="morning"] #node-layer .node.image.image-style-intel{
  background:radial-gradient(circle at 84% 10%,color-mix(in srgb,var(--node-color) 9%,transparent),transparent 38%),linear-gradient(145deg,#fffefd,#f1edf5);
  box-shadow:inset 5px 0 var(--node-color),0 14px 30px #594a6a27;
}
body[data-theme="morning"] #node-layer .node.person.person-style-intel .node-head::before{content:"PERSON / PROFILE"}
body[data-theme="morning"] #node-layer .node.image.image-style-intel .node-kicker::before{content:"IMAGE / MEMORY"}
body[data-theme="morning"] #node-layer .node.person.person-style-analysis,
body[data-theme="morning"] #node-layer .node.image.image-style-analysis{
  background:linear-gradient(color-mix(in srgb,var(--node-color) 8%,transparent) 1px,transparent 1px),linear-gradient(90deg,color-mix(in srgb,var(--node-color) 8%,transparent) 1px,transparent 1px),radial-gradient(circle at 50% 8%,color-mix(in srgb,var(--node-color) 10%,transparent),transparent 52%),linear-gradient(145deg,#f8fbff,#e8edf5);
  background-size:18px 18px,18px 18px,100% 100%,100% 100%;
}
body[data-theme="morning"] #node-layer .node.person.person-style-analysis .node-head::before{content:"PERSON / CONTEXT"}
body[data-theme="morning"] #node-layer .node.image.image-style-analysis .node-kicker::before{content:"IMAGE / CONTEXT"}
body[data-theme="morning"] #node-layer .node.person.person-style-finding,
body[data-theme="morning"] #node-layer .node.image.image-style-finding{background:linear-gradient(145deg,#fffdf9,#f3ece7)}
body[data-theme="morning"] #node-layer .node.person.person-style-finding .node-head,
body[data-theme="morning"] #node-layer .node.image.image-style-finding .node-body{
  background:repeating-linear-gradient(130deg,transparent 0 9px,color-mix(in srgb,var(--node-color) 7%,transparent) 9px 11px),linear-gradient(90deg,color-mix(in srgb,var(--node-color) 13%,#f1e6df),#f8f1ec);
}
body[data-theme="morning"] #node-layer .node.person.person-style-finding .node-head::before{content:"PERSON / HIGHLIGHT"}
body[data-theme="morning"] #node-layer .node.image.image-style-finding .node-kicker::before{content:"IMAGE / HIGHLIGHT"}
body[data-theme="morning"] #node-layer .node.person.circle-avatar h3{
  color:#332d3f;
  border-color:#d7cfdf;
  background:#fffefdE8;
  box-shadow:0 7px 18px #594a6a20;
}
body[data-theme="morning"] #node-layer .node.person.circle-avatar:not(.selected):hover .node-avatar{box-shadow:0 0 25px color-mix(in srgb,var(--node-color) 42%,transparent),0 10px 24px #594a6a2b}

/* 默认关系线按画布明暗切换黑白；自定义颜色保持用户设置。 */
.connection.line-default{stroke:#f4f2ed}
body[data-theme="morning"] .connection.line-default,
body[data-theme="paper"] .connection.line-default{stroke:#24211e}
.viewport[data-background="caseboard"] .connection.line-default{stroke:#f4f2ed}
.viewport[data-background="caseboard"] .connection-label{fill:#f4f2ed;stroke:#211e1a}
body[data-theme] .connection.line-default:hover,
body[data-theme] .connection.line-default.selected,
body[data-theme] .connection-hit:hover+.connection.line-default{stroke:var(--accent)}

/* Inspector refinement: consistent hierarchy, spacing, controls and theme-aware surfaces. */
.inspector{
  right:12px;
  top:70px;
  width:392px;
  max-height:calc(100vh - 82px);
  padding:0 16px 20px;
  border-radius:18px;
  scrollbar-width:thin;
  scrollbar-color:color-mix(in srgb,var(--muted) 38%,transparent) transparent;
}
.inspector::-webkit-scrollbar{width:7px}
.inspector::-webkit-scrollbar-track{background:transparent}
.inspector::-webkit-scrollbar-thumb{border:2px solid transparent;border-radius:999px;background:color-mix(in srgb,var(--muted) 38%,transparent);background-clip:padding-box}
.inspector .panel-heading{
  position:sticky;
  z-index:8;
  top:0;
  align-items:center;
  min-height:80px;
  margin:0 -16px 16px;
  padding:16px 16px 14px;
  border-bottom:1px solid color-mix(in srgb,var(--line) 76%,transparent);
  background:linear-gradient(180deg,color-mix(in srgb,var(--panel) 98%,transparent) 68%,color-mix(in srgb,var(--panel) 91%,transparent));
  backdrop-filter:blur(18px);
}
.inspector .panel-heading h2{max-width:300px;margin:0;font-size:22px;line-height:1.2;letter-spacing:-.025em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.inspector .panel-heading .icon-btn{display:grid;place-items:center;width:38px;height:38px;border-radius:11px;color:var(--muted);font-size:22px;line-height:1;transition:color .16s,border-color .16s,background .16s,transform .16s}
.inspector .panel-heading .icon-btn:hover{border-color:color-mix(in srgb,var(--accent) 38%,var(--line));background:color-mix(in srgb,var(--accent) 9%,var(--panel2));color:var(--text);transform:scale(1.03)}
.inspector .inspector-identity{display:flex;align-items:center;gap:12px;min-width:0;flex:1}
.inspector .inspector-title-block{min-width:0;flex:1}
.inspector .inspector-title-block h2{max-width:100%}
.inspector .inspector-title-block small{display:block;max-width:100%;margin-top:4px;color:color-mix(in srgb,var(--muted) 92%,var(--text));font-size:11px;font-weight:600;line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.inspector .inspector-title-block small[hidden],.inspector .inspector-person-avatar[hidden]{display:none!important}
.inspector .inspector-person-avatar{
  --person-color:var(--accent);
  position:relative;
  display:grid;
  place-items:center;
  flex:0 0 56px;
  width:56px;
  height:56px;
  margin:0;
  padding:0;
  overflow:hidden;
  border:2px solid color-mix(in srgb,var(--person-color) 82%,white);
  border-radius:50%;
  background:color-mix(in srgb,var(--person-color) 16%,var(--panel2));
  color:color-mix(in srgb,var(--person-color) 76%,white);
  box-shadow:inset 0 0 0 1px #ffffff12;
  font-size:19px;
  font-weight:800;
  line-height:1;
  cursor:pointer;
  transition:transform .16s,border-color .16s,box-shadow .16s,filter .16s;
}
.inspector .inspector-person-avatar:hover{transform:scale(1.04);border-color:color-mix(in srgb,var(--person-color) 62%,white);box-shadow:0 0 0 4px color-mix(in srgb,var(--person-color) 10%,transparent),inset 0 0 0 1px #ffffff1a;filter:brightness(1.08)}
.inspector .inspector-person-avatar:focus-visible{outline:2px solid var(--person-color);outline-offset:3px}
.inspector .inspector-person-avatar.dragover{transform:scale(1.06);border-color:#fff;box-shadow:0 0 0 5px color-mix(in srgb,var(--person-color) 22%,transparent)}
.inspector .inspector-person-avatar img{display:block;width:100%;height:100%;object-fit:cover}
.inspector .inspector-person-avatar img[hidden]{display:none!important}
.inspector .inspector-person-avatar>span{display:grid;place-items:center;width:100%;height:100%}
.inspector .inspector-person-avatar>span[hidden]{display:none!important}
.inspector .inspector-person-avatar.mystery{border-color:#777b85;background:#3b3f47;color:#f4f2ed;font-size:31px;font-family:Arial,Helvetica,sans-serif;font-weight:700}
.inspector .inspector-multi-avatars{display:flex;align-items:center;min-width:0;height:38px;padding-left:2px}.inspector .inspector-multi-avatars[hidden]{display:none!important}.inspector .inspector-multi-avatar{display:grid;place-items:center;flex:0 0 38px;width:38px;height:38px;margin-left:-9px;overflow:hidden;border:2px solid var(--inspector-header,var(--panel));border-radius:50%;background:color-mix(in srgb,var(--person-color,#7aa2ff) 20%,var(--panel2));color:var(--text);font-size:12px;font-weight:800;box-shadow:0 1px 5px #0004}.inspector .inspector-multi-avatar:first-child{margin-left:0}.inspector .inspector-multi-avatar img{width:100%;height:100%;object-fit:cover}.inspector .inspector-multi-avatar.more{background:var(--panel2);color:var(--muted);font-size:10px}
.inspector #node-form{display:grid;gap:10px}
.inspector #node-form[hidden],.inspector #line-form[hidden],.inspector #multi-form[hidden],.inspector #group-form[hidden]{display:none}

/* 势力分组拆为底色与交互边框：底色不再覆盖关系线颜色。 */
.group-background-layer{position:absolute;inset:0;z-index:0;width:100%;height:100%;pointer-events:none}
.connections{z-index:1}
.group-layer{position:absolute;inset:0;z-index:2;width:100%;height:100%;pointer-events:none}
#node-layer{z-index:3}
.group-backdrop{position:absolute;box-sizing:border-box;--group-opacity:1;border-radius:24px;background:color-mix(in srgb,var(--group-color) calc(100% * var(--group-opacity)),transparent);box-shadow:0 18px 50px #0002;pointer-events:none;transition:opacity .2s ease,filter .2s ease,background .12s ease}
.group-backdrop.selected{box-shadow:0 0 34px color-mix(in srgb,var(--group-color) calc(22% * var(--group-opacity)),transparent),0 22px 62px #0004}
.group-frame{position:absolute;box-sizing:border-box;--group-opacity:1;border:1.5px solid color-mix(in srgb,var(--group-color) calc(22% + 78% * var(--group-opacity)),transparent);border-radius:24px;background:transparent;box-shadow:inset 0 0 0 1px color-mix(in srgb,#fff calc(7% * var(--group-opacity)),transparent);pointer-events:none;transition:opacity .2s ease,filter .2s ease,border-color .2s ease}
.group-frame::before{content:"";position:absolute;inset:11px;border:1px dashed color-mix(in srgb,var(--group-color) calc(8% + 20% * var(--group-opacity)),transparent);border-radius:16px;pointer-events:none}
.group-frame.selected{border-color:color-mix(in srgb,var(--group-color) calc(45% + 55% * var(--group-opacity)),white);background:transparent;box-shadow:inset 0 0 0 1px color-mix(in srgb,#fff calc(13% * var(--group-opacity)),transparent)}
.group-header{position:absolute;z-index:5;left:22px;top:-24px;display:flex;align-items:center;gap:9px;min-width:190px;max-width:calc(100% - 44px);height:47px;padding:0 12px 0 7px;box-sizing:border-box;border:1px solid color-mix(in srgb,var(--group-color) 62%,#30333a);border-radius:14px;background:color-mix(in srgb,var(--group-color) 12%,#181a1f);color:#f6f7f8;box-shadow:0 10px 24px #0008,inset 0 1px #ffffff0d;pointer-events:auto;cursor:default;user-select:none;overflow:visible}
.group-members-drag-handle{position:relative;z-index:6;display:grid;flex:0 0 31px;place-items:center;width:31px;height:31px;margin:0;padding:0;border:1px solid color-mix(in srgb,var(--group-color) 46%,#3a3d45);border-radius:9px;background:color-mix(in srgb,var(--group-color) 16%,#202228);color:#dfe1e6;font-size:17px;line-height:1;cursor:grab;pointer-events:auto!important;touch-action:none;transition:transform .16s cubic-bezier(.2,.8,.2,1),border-color .16s ease,background .16s ease,color .16s ease,box-shadow .16s ease}
.group-members-drag-handle:hover,.group-members-drag-handle.is-dragging{z-index:7;border-color:color-mix(in srgb,var(--group-color) 58%,transparent);background:color-mix(in srgb,var(--group-color) 78%,#202228);color:#fff;box-shadow:0 0 18px color-mix(in srgb,var(--group-color) 68%,transparent),0 0 34px color-mix(in srgb,var(--group-color) 34%,transparent);transform:scale(1.14)}
.group-members-drag-handle:active,.group-members-drag-handle.is-dragging{cursor:grabbing;transform:scale(1.08)}
.group-members-drag-handle:disabled{opacity:.34;cursor:not-allowed;filter:saturate(.3);box-shadow:none;transform:none}
.group-lock-button{position:relative;z-index:6;display:grid;flex:0 0 31px;place-items:center;width:31px;height:31px;margin-left:2px;padding:0;border:1px solid #ffffff16;border-radius:9px;background:#ffffff08;color:#aeb2bc;cursor:pointer;pointer-events:auto;transition:transform .16s cubic-bezier(.2,.8,.2,1),border-color .16s ease,background .16s ease,color .16s ease,box-shadow .16s ease}
.group-lock-button svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.group-lock-button:hover{border-color:color-mix(in srgb,var(--group-color) 65%,white);background:color-mix(in srgb,var(--group-color) 22%,#202228);color:#fff;transform:scale(1.08)}
.group-lock-button.locked{border-color:color-mix(in srgb,var(--group-color) 72%,white);background:color-mix(in srgb,var(--group-color) 40%,#202228);color:#fff;box-shadow:0 0 14px color-mix(in srgb,var(--group-color) 32%,transparent)}
.group-frame.members-drag-ready{border-color:color-mix(in srgb,var(--group-color) 82%,white);filter:brightness(1.08);box-shadow:inset 0 0 0 1px color-mix(in srgb,#fff 18%,transparent),0 0 24px color-mix(in srgb,var(--group-color) 24%,transparent)}
.group-frame.locked .group-resize-handle{display:none}
.group-frame.locked .group-edge{cursor:default}
.group-frame.locked .group-header{border-style:dashed}
.group-marker{flex:0 0 9px;width:9px;height:26px;border-radius:5px;background:var(--group-color);box-shadow:none}
.group-header span{display:flex;min-width:0;flex:1;flex-direction:column;gap:1px}
.group-header strong{display:block;overflow:hidden;color:#f7f7f8;font-size:13px;font-weight:780;line-height:17px;white-space:nowrap;text-overflow:ellipsis}
.group-header strong[contenteditable="true"]{min-width:92px;padding:2px 5px;border-radius:5px;outline:1px solid var(--group-color);background:#0f1013;cursor:text;user-select:text}
.group-header small{color:#9ea2ac;font-size:9px;font-weight:650;line-height:12px}
.group-edge{position:absolute;margin:0;padding:0;border:0;background:transparent;pointer-events:auto;cursor:pointer}
.group-edge.top,.group-edge.bottom{left:22px;right:22px;height:13px}.group-edge.top{top:-7px}.group-edge.bottom{bottom:-7px}
.group-edge.left,.group-edge.right{top:22px;bottom:22px;width:13px}.group-edge.left{left:-7px}.group-edge.right{right:-7px}
.group-resize-handle{position:absolute;width:15px;height:15px;margin:0;padding:0;border:2px solid color-mix(in srgb,var(--group-color) 76%,white);border-radius:5px;background:#17191e;box-shadow:0 2px 8px #0008;pointer-events:auto;opacity:0;transition:opacity .14s ease,transform .14s ease}
.group-frame.selected .group-resize-handle,.group-frame:hover .group-resize-handle{opacity:1}
.group-resize-handle:hover{transform:scale(1.16);background:var(--group-color)}
.group-resize-handle.nw{left:-7px;top:-7px;cursor:nwse-resize}.group-resize-handle.ne{right:-7px;top:-7px;cursor:nesw-resize}.group-resize-handle.sw{left:-7px;bottom:-7px;cursor:nesw-resize}.group-resize-handle.se{right:-7px;bottom:-7px;cursor:nwse-resize}
.world.group-focus-mode #node-layer .node.group-nonmember{opacity:.23;filter:saturate(.35) brightness(.58);transition:opacity .2s ease,filter .2s ease}
.world.group-focus-mode #node-layer .node.group-member{opacity:1;filter:none}
.world.group-members-drag-ready #node-layer .node.group-member{opacity:1;filter:brightness(1.18) saturate(1.08);transition:opacity .14s ease,filter .14s ease}
.world.group-members-drag-ready #node-layer .node.group-nonmember{opacity:.16;filter:saturate(.25) brightness(.48)}
.world.group-focus-mode.group-range-preview-mode #node-layer .node.person{opacity:.23;filter:saturate(.35) brightness(.58);transition:opacity .12s ease,filter .12s ease}
.world.group-focus-mode.group-range-preview-mode #node-layer .node.person.group-range-hit{opacity:1;filter:none}
.world.group-focus-mode #line-layer>g.group-nonmember{opacity:.16;transition:opacity .2s ease}
.world.group-focus-mode #line-layer>g.group-member{opacity:1}
.world.group-focus-mode :is(.group-frame,.group-backdrop):not(.selected){opacity:.18;filter:saturate(.35)}
.align-toolbar .group-create-action{color:#f1f3f6;background:color-mix(in srgb,var(--accent) 13%,transparent)}
.align-toolbar .group-create-action:hover{background:color-mix(in srgb,var(--accent) 28%,transparent)}
.align-toolbar .group-create-action:disabled{opacity:.35;cursor:not-allowed}

#group-form{display:flex;flex-direction:column;gap:18px}
.group-inspector-summary{display:flex;align-items:center;gap:12px;padding:14px 16px;border:1px solid var(--line);border-radius:16px;background:color-mix(in srgb,var(--panel2) 78%,transparent)}
#group-inspector-mark{width:10px;height:38px;border-radius:6px;background:var(--group-color);box-shadow:0 0 18px color-mix(in srgb,var(--group-color) 52%,transparent)}
.group-inspector-summary div{display:flex;flex-direction:column;gap:3px}.group-inspector-summary strong{font-size:16px}.group-inspector-summary small{color:var(--muted);font-size:12px}
.group-inspector-tip{margin:0;color:var(--muted);font-size:11px;line-height:1.55;text-align:center}
body[data-theme="morning"] .group-header{background:color-mix(in srgb,var(--group-color) 10%,#fffdfb);color:#302b3b;box-shadow:0 10px 24px #594a6a32}
body[data-theme="morning"] .group-header strong{color:#302b3b}body[data-theme="morning"] .group-header small{color:#807887}
body[data-theme="paper"] .group-header{background:color-mix(in srgb,var(--group-color) 10%,#eadfc9);color:#332719;border-color:color-mix(in srgb,var(--group-color) 50%,#8b7655)}
body[data-theme="paper"] .group-header strong{color:#332719}body[data-theme="paper"] .group-header small{color:#6b5c47}
body[data-theme="blueprint"] .group-header{background:color-mix(in srgb,var(--group-color) 12%,#092033)}
.inspector .inspector-disclosure{margin:0;border-color:color-mix(in srgb,var(--line) 90%,transparent);border-radius:12px;background:color-mix(in srgb,var(--panel2) 62%,transparent);box-shadow:inset 0 1px #ffffff05;overflow:clip;transition:border-color .17s,background .17s,box-shadow .17s}
.inspector .inspector-disclosure:hover{border-color:color-mix(in srgb,var(--muted) 36%,var(--line))}
.inspector .inspector-disclosure[open]{background:color-mix(in srgb,var(--panel2) 74%,transparent);box-shadow:inset 3px 0 color-mix(in srgb,var(--accent) 72%,transparent),inset 0 1px #ffffff07}
.inspector .inspector-disclosure>summary{min-height:52px;padding:11px 13px 11px 16px;font-size:13px;font-weight:760;letter-spacing:.01em}
.inspector .inspector-disclosure>summary::after{width:27px;height:27px;border-radius:8px;font-size:18px;transition:transform .18s,color .18s,border-color .18s,background .18s}
.inspector .inspector-disclosure[open]>summary{border-bottom-color:color-mix(in srgb,var(--line) 78%,transparent)}
.inspector .inspector-disclosure[open]>summary::after{box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 5%,transparent)}
.inspector .inspector-disclosure-body{padding:15px 16px 16px}
.inspector #node-info-section[open]{border-color:color-mix(in srgb,var(--accent) 28%,var(--line))}
.inspector label{margin:0 0 15px;color:color-mix(in srgb,var(--muted) 92%,var(--text));font-size:12px;line-height:1.35}
.inspector label:last-child{margin-bottom:0}
.inspector input,.inspector textarea,.inspector select{margin-top:8px;border-color:color-mix(in srgb,var(--line) 92%,transparent);border-radius:10px;padding:11px 13px;background:color-mix(in srgb,var(--bg) 72%,var(--panel));font-size:14px;transition:border-color .16s,box-shadow .16s,background .16s}
.inspector input,.inspector select{min-height:44px}
.inspector textarea{min-height:116px;line-height:1.58}
.inspector .field-label-row{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:25px}
.inspector .ai-field-btn{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  min-height:26px;
  margin:-3px 0 -2px;
  padding:4px 9px;
  border:1px solid color-mix(in srgb,var(--accent) 34%,var(--line));
  border-radius:999px;
  background:color-mix(in srgb,var(--accent) 8%,var(--panel2));
  color:color-mix(in srgb,var(--accent) 78%,var(--text));
  font-size:10px;
  font-weight:760;
  line-height:1;
  letter-spacing:.01em;
  cursor:pointer;
  transition:border-color .16s,background .16s,color .16s,transform .16s,opacity .16s;
}
.inspector .ai-field-btn[hidden]{display:none!important}
.inspector .ai-field-btn:hover{border-color:color-mix(in srgb,var(--accent) 62%,var(--line));background:color-mix(in srgb,var(--accent) 14%,var(--panel2));color:var(--text);transform:translateY(-1px)}
.inspector .ai-field-btn:disabled{cursor:wait;opacity:.68;transform:none}
.inspector .ai-field-btn.loading{animation:ai-field-pulse 1s ease-in-out infinite alternate}
@keyframes ai-field-pulse{to{box-shadow:0 0 0 4px color-mix(in srgb,var(--accent) 9%,transparent)}}
.inspector input:hover,.inspector textarea:hover,.inspector select:hover{border-color:color-mix(in srgb,var(--muted) 42%,var(--line))}
.inspector input:focus,.inspector textarea:focus,.inspector select:focus{border-color:color-mix(in srgb,var(--accent) 68%,var(--line));background:color-mix(in srgb,var(--bg) 84%,var(--panel));box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 10%,transparent)}
.inspector .rotation-control,.inspector .layer-control{margin:0;border-color:color-mix(in srgb,var(--line) 90%,transparent);border-radius:12px;background:color-mix(in srgb,var(--panel2) 58%,transparent);box-shadow:inset 0 1px #ffffff05}
.inspector .rotation-control{min-height:58px;padding:10px 12px 10px 15px}
.inspector .rotation-control span,.inspector .layer-control>span{color:var(--muted);font-size:10px;font-weight:650;letter-spacing:.02em}
.inspector .rotation-control .btn{min-width:124px}
.inspector .layer-control{gap:10px;padding:12px 14px 14px}
.inspector .layer-control>div{gap:8px}
.inspector .layer-control .btn,.inspector .rotation-control .btn{min-height:38px;border-radius:9px;background:color-mix(in srgb,var(--panel) 84%,transparent)}
.inspector .layer-control .btn:hover,.inspector .rotation-control .btn:hover{border-color:color-mix(in srgb,var(--accent) 34%,var(--line));background:color-mix(in srgb,var(--accent) 7%,var(--panel2))}
.inspector #node-form>.form-row{gap:8px;margin:2px 0 0;padding-top:10px;border-top:1px solid color-mix(in srgb,var(--line) 72%,transparent)}
.inspector :is(#node-form>.form-row,#group-form>.group-delete-row) .btn{min-height:36px;padding:7px 13px;border-radius:9px;font-family:inherit;font-size:12px;font-weight:650;line-height:1.2}
.inspector :is(#node-form>.form-row,#group-form>.group-delete-row) .btn:first-child{min-width:64px}
.inspector #node-form>.form-row .btn:last-child{margin-left:auto;min-width:92px}
.inspector :is(#node-form>.form-row,#group-form>.group-delete-row) .btn.danger{border-color:color-mix(in srgb,#ff725e 24%,var(--line));background:color-mix(in srgb,#ff725e 7%,var(--panel2));color:#ff8777}
.inspector :is(#node-form>.form-row,#group-form>.group-delete-row) .btn.danger:hover{border-color:color-mix(in srgb,#ff725e 58%,var(--line));background:color-mix(in srgb,#ff725e 13%,var(--panel2));color:#ffb0a5}
.inspector .style-size-controls{border-radius:10px;background:color-mix(in srgb,var(--bg) 35%,transparent)}
.inspector .empty-state{padding:12px 4px 18px;line-height:1.65}
@media(max-width:760px){.inspector{right:8px;top:66px;width:calc(100vw - 16px);max-height:60vh;padding-inline:12px}.inspector .panel-heading{margin-inline:-12px;padding-inline:12px}.inspector .panel-heading h2{max-width:calc(100vw - 100px)}}

.inspector .layer-control{padding:11px 12px}
.inspector .layer-control>.layer-control-row{display:flex;grid-template-columns:none;align-items:center;justify-content:space-between;gap:12px}
.inspector .layer-number-field{display:flex;align-items:center;gap:10px;margin:0;color:var(--muted);font-size:10px;font-weight:650;white-space:nowrap}
.inspector .layer-number-field>span{display:flex;align-items:center;gap:7px}
.inspector .layer-number-field input{width:58px;min-height:36px;margin:0;padding:7px 5px;border-radius:8px;text-align:center;font-size:12px;font-weight:750;font-variant-numeric:tabular-nums;-moz-appearance:textfield}
.inspector .layer-number-field input::-webkit-inner-spin-button,.inspector .layer-number-field input::-webkit-outer-spin-button{margin:0;opacity:.55}
.inspector .layer-number-field i{color:color-mix(in srgb,var(--muted) 62%,transparent);font-style:normal}
.inspector .layer-number-field output{min-width:20px;color:var(--text);font-size:11px;font-weight:700;font-variant-numeric:tabular-nums}
.inspector .layer-symbol-actions{display:flex;align-items:center;gap:7px}
.inspector .layer-symbol-actions .btn{display:grid;place-items:center;width:40px;min-width:40px;height:38px;min-height:38px;margin:0;padding:0;border-radius:9px;font-size:19px;line-height:1}
.inspector .layer-symbol-actions .btn:disabled{opacity:.3;cursor:not-allowed}
.inspector .rotation-control #reset-rotation-btn{display:grid;place-items:center;width:40px;min-width:40px;height:38px;min-height:38px;padding:0;font-size:20px;line-height:1}
.inspector .node-edit-controls{display:grid;gap:10px}
.inspector .node-edit-controls>.style-size-controls{margin:0;padding:12px;border-color:color-mix(in srgb,var(--line) 90%,transparent);background:color-mix(in srgb,var(--panel2) 58%,transparent)}
.inspector .node-edit-controls>.style-size-controls .reset-size-btn{margin-bottom:0}
.inspector .node-edit-controls>.edit-size-control{display:grid;grid-template-columns:minmax(0,1fr) 40px;align-items:end;gap:10px}
.inspector .node-edit-controls>.edit-size-control label{margin:0}
.inspector .note-font-controls{display:grid;gap:10px;padding:12px}
.inspector .note-font-row{display:grid;grid-template-columns:minmax(0,1fr) 40px;align-items:end;gap:10px}
.inspector .note-font-row+.note-font-row{padding-top:10px;border-top:1px solid color-mix(in srgb,var(--line) 70%,transparent)}
.inspector .note-font-row label{margin:0;color:var(--muted);font-size:10px;font-weight:650}
.inspector .note-font-row .icon-reset-btn{display:grid;place-items:center;width:40px;min-width:40px;height:40px;min-height:40px;margin:0;padding:0;border-radius:9px;font-size:19px;line-height:1}
.inspector .node-edit-controls .icon-reset-btn{display:grid;place-items:center;width:40px;min-width:40px;height:38px;min-height:38px;margin:0;padding:0;border-radius:9px;font-size:19px;line-height:1}
.inspector .rotation-control{align-items:flex-end;min-height:76px;padding:11px 12px}
.inspector .rotation-field{flex:1;min-width:0;margin:0;color:var(--muted);font-size:10px;font-weight:650}
.inspector .rotation-field>.range-control{grid-template-columns:minmax(0,1fr) 64px;gap:9px;margin-top:7px}
.inspector .rotation-field .range-control>input[type="range"]{width:100%;min-height:18px;height:18px;margin:0;padding:0}
.inspector .rotation-field .number-with-unit input{min-height:38px;height:38px;margin:0;padding-block:7px}
.inspector input[type="number"]{-moz-appearance:textfield;appearance:textfield}
.inspector input[type="number"]::-webkit-inner-spin-button,.inspector input[type="number"]::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none;margin:0;display:none}

/* Edit section: one visual rhythm for size, rotation and layer controls. */
.inspector .node-edit-controls{gap:10px}
.inspector .node-edit-controls>.edit-size-control,
.inspector .node-edit-controls>.rotation-control,
.inspector .node-edit-controls>.layer-control{
  min-height:86px;
  padding:12px 13px;
  border-radius:12px;
}
.inspector .node-edit-controls>.edit-size-control,
.inspector .node-edit-controls>.rotation-control{
  display:grid;
  grid-template-columns:minmax(0,1fr) 40px;
  align-items:end;
  gap:10px;
}
.inspector .node-edit-controls>.edit-size-control label,
.inspector .node-edit-controls>.rotation-control .rotation-field,
.inspector .node-edit-controls .layer-number-field{
  margin:0;
  color:color-mix(in srgb,var(--muted) 94%,var(--text));
  font-size:12px;
  font-weight:650;
  line-height:1.3;
  letter-spacing:0;
}
.inspector .node-edit-controls .range-control{
  display:grid;
  grid-template-columns:minmax(0,1fr) 72px;
  align-items:center;
  gap:10px;
  margin-top:9px;
}
.inspector .node-edit-controls .range-control>input[type="range"]{
  width:100%;
  min-width:0;
  min-height:20px;
  height:20px;
  margin:0;
  padding:0;
}
.inspector .node-edit-controls .number-with-unit{
  position:relative;
  display:block;
  width:72px;
}
.inspector .node-edit-controls .number-with-unit input{
  width:100%;
  min-height:40px;
  height:40px;
  margin:0;
  padding:7px 23px 7px 8px;
  border-radius:10px;
  font-size:13px;
  font-weight:700;
  line-height:1;
  text-align:center;
  font-variant-numeric:tabular-nums;
}
.inspector .node-edit-controls .number-with-unit>span{
  position:absolute;
  top:50%;
  right:8px;
  transform:translateY(-50%);
  color:var(--muted);
  font-size:10px;
  font-weight:650;
  pointer-events:none;
}
.inspector .node-edit-controls .icon-reset-btn,
.inspector .node-edit-controls #reset-rotation-btn{
  display:grid;
  place-items:center;
  width:40px;
  min-width:40px;
  height:40px;
  min-height:40px;
  margin:0;
  padding:0;
  border-radius:10px;
  font-size:20px;
  line-height:1;
}
.inspector .node-edit-controls>.layer-control{display:block}
.inspector .node-edit-controls .layer-control-row{
  display:grid;
  gap:10px;
  width:100%;
}
.inspector .node-edit-controls .layer-number-field{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
  white-space:nowrap;
}
.inspector .node-edit-controls .layer-number-field>span{
  display:flex;
  align-items:center;
  gap:7px;
  min-height:36px;
}
.inspector .node-edit-controls .layer-number-field input{
  width:72px;
  min-height:36px;
  height:36px;
  margin:0;
  padding:7px 8px;
  border-radius:10px;
  font-size:13px;
  text-align:center;
}
.inspector .node-edit-controls .layer-symbol-actions{
  display:grid;
  grid-template-columns:repeat(4,minmax(0,1fr));
  gap:7px;
  width:100%;
}
.inspector .node-edit-controls .layer-symbol-actions .btn{
  width:100%;
  min-width:0;
  height:40px;
  min-height:40px;
  border-radius:10px;
  color:color-mix(in srgb,var(--text) 88%,var(--muted));
  font-family:Arial,"Noto Sans SC",sans-serif;
  font-size:20px;
  font-weight:650;
  line-height:1;
  letter-spacing:-.02em;
}
.inspector .node-edit-controls .layer-symbol-actions .layer-edge-btn{font-size:17px;letter-spacing:-.18em;padding-right:4px}

/* Inspector side sheet: separate dense canvas content from focused editing. */
body{
  --inspector-shell:#191b20;
  --inspector-shell-bottom:#16181d;
  --inspector-header:#1e2026;
  --inspector-section:#202228;
  --inspector-section-open:#23252c;
  --inspector-field:#111318;
  --inspector-border:#3b3e48;
  --inspector-edge:#4a4e59;
  --inspector-shadow-side:#0009;
  --inspector-shadow-down:#0008;
}
body[data-theme="morning"]{
  --inspector-shell:#f3f0f5;
  --inspector-shell-bottom:#ebe7ee;
  --inspector-header:#faf7fb;
  --inspector-section:#f8f5fa;
  --inspector-section-open:#fffafd;
  --inspector-field:#fffefe;
  --inspector-border:#d5ceda;
  --inspector-edge:#c4bacb;
  --inspector-shadow-side:#463a5540;
  --inspector-shadow-down:#382e462e;
}
body[data-theme="paper"]{
  --inspector-shell:#eee3cf;
  --inspector-shell-bottom:#dfd0b6;
  --inspector-header:#f5ead8;
  --inspector-section:#e8dcc7;
  --inspector-section-open:#f1e5d2;
  --inspector-field:#f8efdf;
  --inspector-border:#ae9a7a;
  --inspector-edge:#9b8563;
  --inspector-shadow-side:#4d351f58;
  --inspector-shadow-down:#3d2c1c42;
}
body[data-theme="blueprint"]{
  --inspector-shell:#0b2133;
  --inspector-shell-bottom:#081a29;
  --inspector-header:#0d273b;
  --inspector-section:#102b40;
  --inspector-section-open:#123149;
  --inspector-field:#071725;
  --inspector-border:#315a74;
  --inspector-edge:#427694;
  --inspector-shadow-side:#00101ec7;
  --inspector-shadow-down:#000914b3;
}
.inspector{
  isolation:isolate;
  border-color:var(--inspector-border);
  border-left-color:var(--inspector-edge);
  background:linear-gradient(180deg,var(--inspector-shell),var(--inspector-shell-bottom));
  box-shadow:-24px 0 58px var(--inspector-shadow-side),0 22px 52px var(--inspector-shadow-down),inset 1px 0 #ffffff08;
  backdrop-filter:none;
}
.inspector .panel-heading{
  border-bottom-color:color-mix(in srgb,var(--inspector-border) 82%,transparent);
  background:linear-gradient(180deg,color-mix(in srgb,var(--inspector-header) 98%,transparent),color-mix(in srgb,var(--inspector-header) 94%,var(--inspector-shell)));
  box-shadow:0 8px 18px color-mix(in srgb,var(--inspector-shell-bottom) 60%,transparent);
  backdrop-filter:none;
}
.inspector .inspector-disclosure{
  border-color:color-mix(in srgb,var(--inspector-border) 88%,transparent);
  background:var(--inspector-section);
  box-shadow:inset 0 1px #ffffff06,0 4px 12px #0000000c;
}
.inspector .inspector-disclosure:hover{border-color:color-mix(in srgb,var(--muted) 42%,var(--inspector-border))}
.inspector .inspector-disclosure[open]{
  border-color:color-mix(in srgb,var(--accent) 34%,var(--inspector-border));
  background:var(--inspector-section-open);
  box-shadow:inset 3px 0 color-mix(in srgb,var(--accent) 78%,transparent),inset 0 1px #ffffff08,0 7px 18px #00000018;
}
.inspector input,.inspector textarea,.inspector select{
  border-color:color-mix(in srgb,var(--inspector-border) 82%,transparent);
  background:var(--inspector-field);
  box-shadow:inset 0 1px 2px #00000024;
}
.inspector input:focus,.inspector textarea:focus,.inspector select:focus{
  background:color-mix(in srgb,var(--inspector-field) 92%,var(--accent));
}
.inspector .rotation-control,
.inspector .layer-control,
.inspector .node-edit-controls>.style-size-controls{
  border-color:color-mix(in srgb,var(--inspector-border) 86%,transparent);
  background:color-mix(in srgb,var(--inspector-section) 88%,var(--inspector-field));
}
.inspector .layer-control .btn,
.inspector .rotation-control .btn,
.inspector .node-edit-controls .icon-reset-btn{
  background:color-mix(in srgb,var(--inspector-header) 84%,var(--inspector-field));
}
@media(max-width:760px){
  .inspector{box-shadow:0 18px 48px var(--inspector-shadow-down),inset 0 1px #ffffff08}
}

/* 自动生成但尚未编辑的内容使用提示文字层级。 */
.inspector input.auto-text-value,.inspector textarea.auto-text-value{color:color-mix(in srgb,var(--muted) 88%,var(--text));font-family:Inter,"Noto Sans SC","Microsoft YaHei",system-ui,sans-serif;font-size:15px;font-weight:420;letter-spacing:.005em}
.inspector textarea.auto-text-value{line-height:1.65}
.inspector input.auto-text-value:focus,.inspector textarea.auto-text-value:focus{color:color-mix(in srgb,var(--muted) 72%,var(--text))}
body[data-theme="morning"] .inspector input.auto-text-value,body[data-theme="morning"] .inspector textarea.auto-text-value{color:#8b8492}
body[data-theme="paper"] .inspector input.auto-text-value,body[data-theme="paper"] .inspector textarea.auto-text-value{color:#827665;font-family:"Noto Serif SC",Georgia,"Times New Roman",serif}
body[data-theme="blueprint"] .inspector input.auto-text-value,body[data-theme="blueprint"] .inspector textarea.auto-text-value{color:#7596ad}

.group-custom-color-row{display:grid;grid-template-columns:48px minmax(0,1fr) 44px 86px;align-items:center;gap:8px;margin-top:-8px}
.inspector .group-color-field{display:block;margin:0 0 15px;color:color-mix(in srgb,var(--muted) 92%,var(--text));font-size:12px;line-height:1.35}
.inspector .group-custom-color-row input{height:42px;margin:0}
.inspector .group-custom-color-row input[type="color"]{width:48px;padding:4px;border-radius:10px;cursor:pointer}
.inspector .group-custom-color-row input[type="color"]::-webkit-color-swatch-wrapper{padding:0}
.inspector .group-custom-color-row input[type="color"]::-webkit-color-swatch{border:0;border-radius:7px}
.inspector .group-custom-color-row input[type="text"]{font:700 12px/1 ui-monospace,SFMono-Regular,Consolas,monospace;letter-spacing:.045em;text-transform:uppercase}
.group-custom-color-row .btn{height:42px;padding:0 8px;white-space:nowrap}
#group-form #save-group-color-btn{margin-top:-10px}
#group-form #saved-group-color-picker{margin-top:-10px}
#group-form .group-delete-row{justify-content:flex-start;margin-top:4px}
#group-form .group-inspector-tip{max-width:360px;margin-top:-6px;text-align:left}

/* 关系名称：自动避让；按住 Ctrl/Command 后拖动微调。 */
.connection-label{pointer-events:auto;cursor:pointer;user-select:none}
.connection-label:hover{fill:#fff;font-weight:750}
.connection-label.selected{fill:var(--accent)!important;font-size:13px;font-weight:850;filter:drop-shadow(0 0 3px color-mix(in srgb,var(--accent) 82%,transparent)) drop-shadow(0 0 8px color-mix(in srgb,var(--accent) 38%,transparent))}
.connection-label.label-dragging{cursor:grabbing;fill:#fff;filter:drop-shadow(0 0 5px color-mix(in srgb,var(--accent) 65%,transparent))}
.line-edit-section{margin-top:4px!important}
.line-edit-section .inspector-disclosure-body{display:grid;gap:12px}
.line-edit-section .inspector-disclosure-body>label{margin:0}
.line-edit-section select[hidden]{display:none!important}
.line-edit-toolbar{display:flex;align-items:center;justify-content:space-between;min-height:34px;padding-bottom:8px;border-bottom:1px solid color-mix(in srgb,var(--line) 72%,transparent)}
.line-edit-toolbar>span{color:var(--muted);font-size:10px;font-weight:700;letter-spacing:.05em}
.line-edit-toolbar .line-reset-icon{display:grid;place-items:center;width:32px;min-width:32px;height:32px;min-height:32px;padding:0;border-radius:9px;background:color-mix(in srgb,var(--panel2) 72%,transparent);color:var(--text);font-size:17px;line-height:1}
.line-edit-toolbar .line-reset-icon:hover{border-color:color-mix(in srgb,var(--accent) 48%,var(--line));background:color-mix(in srgb,var(--accent) 10%,var(--panel2));color:var(--accent)}
.line-option-grid,.line-motion-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.line-motion-grid{grid-template-columns:minmax(0,1.55fr) minmax(84px,.75fr)}
.line-option-block{min-width:0}
.line-control-label{display:block;margin:0 0 6px;color:color-mix(in srgb,var(--muted) 94%,var(--text));font-size:10px;font-weight:650;line-height:1.2}
.line-segmented{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));padding:3px;border:1px solid color-mix(in srgb,var(--inspector-border) 88%,transparent);border-radius:10px;background:color-mix(in srgb,var(--inspector-field) 88%,transparent);box-shadow:inset 0 1px 2px #0000001f}
.line-segmented button{display:flex;align-items:center;justify-content:center;gap:6px;min-width:0;height:34px;padding:0 8px;border:0;border-radius:7px;background:transparent;color:var(--muted);font:650 11px/1 Inter,"Noto Sans SC","Microsoft YaHei",system-ui,sans-serif;white-space:nowrap;cursor:pointer;transition:color .15s,background .15s,box-shadow .15s,transform .15s}
.line-segmented button:hover{color:var(--text);background:color-mix(in srgb,var(--text) 6%,transparent)}
.line-segmented button.active,.line-segmented button[aria-pressed="true"]{background:color-mix(in srgb,var(--accent) 17%,var(--inspector-header));color:var(--text);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent) 42%,transparent),0 2px 7px #0002}
.line-segmented button:focus-visible{outline:2px solid color-mix(in srgb,var(--accent) 72%,transparent);outline-offset:1px}
.line-segmented button:disabled{opacity:.34;cursor:not-allowed;background:transparent;box-shadow:none}
.line-motion-segmented{grid-template-columns:repeat(3,minmax(0,1fr))}
.line-direction-segmented button{font-size:16px}
.line-icon-straight,.line-icon-curve,.line-icon-solid,.line-icon-dashed{position:relative;display:block;width:18px;height:9px;flex:0 0 18px}
.line-icon-straight::before,.line-icon-solid::before,.line-icon-dashed::before{content:"";position:absolute;left:1px;right:1px;top:4px;border-top:2px solid currentColor}
.line-icon-dashed::before{border-top-style:dashed}
.line-icon-curve::before{content:"";position:absolute;left:1px;top:1px;width:15px;height:7px;border-top:2px solid currentColor;border-radius:50% 50% 0 0}
.line-slider-stack{display:grid;gap:3px;padding:6px 11px;border:1px solid color-mix(in srgb,var(--inspector-border) 82%,transparent);border-radius:11px;background:color-mix(in srgb,var(--inspector-field) 66%,transparent)}
.line-edit-section .line-slider-row{display:grid;grid-template-columns:45px minmax(0,1fr);align-items:center;gap:8px;min-height:42px;margin:0;color:var(--muted);font-size:10px;font-weight:650}
.line-edit-section .line-slider-row+.line-slider-row{border-top:1px solid color-mix(in srgb,var(--line) 58%,transparent)}
.line-edit-section .line-slider-row .range-control{grid-template-columns:minmax(0,1fr) 58px;gap:9px;margin:0}
.line-edit-section .line-slider-row .number-with-unit input{height:34px;min-height:34px;margin:0;padding:6px 21px 6px 7px;border-radius:8px;text-align:center}
.line-edit-section .line-slider-row output{font-size:10px;font-weight:700}
.line-edit-section .line-color-control{position:relative;min-width:0;padding-top:2px}
.line-edit-section .line-color-toolbar{display:grid;grid-template-columns:minmax(0,1fr) 118px;align-items:center;gap:9px}
.line-edit-section .line-color-swatches{display:flex;align-items:center;min-width:0;gap:8px;overflow:visible}
.line-edit-section .line-color-control .color-picker{flex:0 0 auto;gap:7px;margin:0}
.line-edit-section .line-color-control .color-dot{width:24px;height:24px;flex:0 0 24px}
.line-edit-section .line-custom-color-row{grid-template-columns:36px minmax(0,1fr);gap:6px;margin:0}
.line-edit-section #field-line-color{width:36px;height:34px;border-radius:9px}
.line-edit-section .line-custom-color-row input{min-width:0;height:34px;padding:7px 8px;font-size:10px}
.line-edit-section .line-custom-color-popover{position:absolute;z-index:22;right:0;bottom:calc(100% + 9px);width:min(292px,100%);margin:0;padding:11px;border-color:color-mix(in srgb,var(--accent) 30%,var(--line));background:color-mix(in srgb,var(--inspector-header) 96%,#000);box-shadow:0 20px 48px #0008,0 0 0 1px #ffffff08 inset}
.line-edit-section .line-custom-color-popover .custom-color-sv{height:132px}
.line-edit-section .line-custom-color-popover .custom-color-hue-row{grid-template-columns:30px minmax(0,1fr);gap:9px;margin-top:9px}
.line-edit-section .line-custom-color-popover .custom-color-hue-row>span{width:30px;height:30px}
.line-color-advanced{margin-top:9px;border-top:1px solid color-mix(in srgb,var(--line) 70%,transparent)}
.line-color-advanced>summary{padding:9px 1px 0;color:var(--muted);font-size:9px;font-weight:700;list-style:none;cursor:pointer;user-select:none}
.line-color-advanced>summary::-webkit-details-marker{display:none}
.line-color-advanced>summary::after{content:"＋";float:right;color:var(--muted)}
.line-color-advanced[open]>summary::after{content:"−"}
.line-color-advanced .custom-color-rgb{margin-top:9px}
.line-color-control>.line-palette-reset-btn{width:100%;min-height:32px;margin-top:8px;padding:6px 8px;border-radius:8px;color:var(--muted);font-size:9px}
.line-color-control>.line-palette-reset-btn:hover{border-color:color-mix(in srgb,var(--accent) 38%,var(--line));background:color-mix(in srgb,var(--accent) 7%,var(--panel2));color:var(--text)}
.line-edit-section .line-custom-color-popover .custom-color-popover-actions{grid-template-columns:40px minmax(0,1fr) 48px;gap:7px;margin-top:10px}
.line-edit-section .line-custom-color-popover .custom-color-popover-actions .btn{height:34px;min-height:34px;padding:6px 8px;border-radius:8px;font-size:10px}
.line-edit-section .line-custom-color-popover .line-color-icon-action{padding:0;font-size:17px}
.line-edit-section .line-palette-slot.replace-target{cursor:copy;animation:line-palette-target 1s ease-in-out infinite;box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 84%,#fff),0 0 0 6px color-mix(in srgb,var(--accent) 18%,transparent)}
.line-edit-section .line-color-picker-replacing .custom-color-dot{opacity:.35;pointer-events:none}
@keyframes line-palette-target{50%{transform:scale(1.1);box-shadow:0 0 0 2px #fff,0 0 0 7px color-mix(in srgb,var(--accent) 27%,transparent)}}
@media(max-width:420px){.line-option-grid,.line-motion-grid{grid-template-columns:1fr}.line-edit-section .line-slider-row{grid-template-columns:42px minmax(0,1fr)}.line-edit-section .line-color-toolbar{grid-template-columns:1fr}.line-edit-section .line-custom-color-row{grid-template-columns:36px minmax(0,1fr)}}
.compact-color-control{position:relative;min-width:0}
#node-color-section[open]{position:relative;z-index:5;overflow:visible}
.compact-color-label{display:block;margin:0 0 6px;color:color-mix(in srgb,var(--muted) 94%,var(--text));font-size:10px;font-weight:650;line-height:1.2}
.compact-color-toolbar{display:grid;grid-template-columns:minmax(0,1fr) 110px;align-items:center;gap:8px}
.compact-color-swatches{display:flex;align-items:center;min-width:0;overflow:visible}
.compact-color-control .color-picker{display:flex;flex-wrap:nowrap;gap:5px;margin:0}
.compact-color-control .color-dot{width:21px;height:21px;flex:0 0 21px;padding:0}
.compact-color-control .custom-color-dot{font-size:15px}
.compact-custom-color-row{grid-template-columns:34px minmax(0,1fr);gap:6px;margin:0}
.inspector .compact-custom-color-row input{min-width:0;height:34px;margin:0;padding:7px 7px;font-size:10px}
.compact-color-control :is(#field-node-color,#field-line-color,#field-group-color-custom){display:block;width:34px;height:34px;padding:3px;border:1px solid color-mix(in srgb,var(--inspector-border) 88%,transparent);border-radius:9px;background:var(--panel2);cursor:pointer}
.compact-color-control :is(#field-node-color,#field-line-color,#field-group-color-custom)>i{display:block;width:100%;height:100%;border-radius:6px;background:var(--compact-current-color,#ff725e);box-shadow:inset 0 0 0 1px #ffffff28}
.compact-color-control :is(#field-node-color,#field-line-color,#field-group-color-custom):hover,.compact-color-control :is(#field-node-color,#field-line-color,#field-group-color-custom)[aria-expanded="true"]{border-color:color-mix(in srgb,var(--accent) 58%,var(--line));box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 16%,transparent)}
.compact-palette-reset-btn{width:100%;min-height:32px;margin-top:8px;padding:6px 8px;border-radius:8px;color:var(--muted);font-size:9px}
.compact-palette-reset-btn:hover{border-color:color-mix(in srgb,var(--accent) 38%,var(--line));background:color-mix(in srgb,var(--accent) 7%,var(--panel2));color:var(--text)}
.compact-color-popover{position:absolute;z-index:22;right:0;bottom:calc(100% + 9px);width:min(292px,100%);margin:0;padding:11px;border-color:color-mix(in srgb,var(--accent) 30%,var(--line));background:color-mix(in srgb,var(--inspector-header) 96%,#000);box-shadow:0 20px 48px #0008,0 0 0 1px #ffffff08 inset}
.compact-color-popover .custom-color-sv{height:132px}
.compact-color-popover .custom-color-hue-row{grid-template-columns:30px minmax(0,1fr);gap:9px;margin-top:9px}
.compact-color-popover .custom-color-hue-row>span{width:30px;height:30px}
.compact-color-advanced{margin-top:9px;border-top:1px solid color-mix(in srgb,var(--line) 70%,transparent)}
.compact-color-advanced>summary{padding:9px 1px 0;color:var(--muted);font-size:9px;font-weight:700;list-style:none;cursor:pointer;user-select:none}
.compact-color-advanced>summary::-webkit-details-marker{display:none}
.compact-color-advanced>summary::after{content:"＋";float:right;color:var(--muted)}
.compact-color-advanced[open]>summary::after{content:"−"}
.compact-color-advanced .custom-color-rgb{margin-top:9px}
.compact-color-popover .custom-color-popover-actions{grid-template-columns:40px minmax(0,1fr) 48px;gap:7px;margin-top:10px}
.compact-color-popover .custom-color-popover-actions .btn{height:34px;min-height:34px;padding:6px 8px;border-radius:8px;font-size:10px}
.compact-color-popover .compact-color-icon-action{padding:0;font-size:17px}
.compact-color-control .palette-slot.replace-target{cursor:copy;animation:line-palette-target 1s ease-in-out infinite;box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 84%,#fff),0 0 0 6px color-mix(in srgb,var(--accent) 18%,transparent)}
.compact-color-control .color-picker-replacing .custom-color-dot{opacity:.35;pointer-events:none}
@media(max-width:420px){.compact-color-toolbar{grid-template-columns:1fr}.compact-custom-color-row{grid-template-columns:34px minmax(0,1fr)}}
.line-form-actions{display:flex;align-items:center;justify-content:flex-end;gap:10px;margin-top:2px;padding-top:12px;border-top:1px solid color-mix(in srgb,var(--line) 72%,transparent)}
.line-form-actions .btn{min-height:36px;padding:7px 12px;border-radius:9px;font-size:11px;font-weight:650}
.line-form-actions .btn.danger{margin-left:auto;border-color:color-mix(in srgb,#ff725e 24%,var(--line));background:color-mix(in srgb,#ff725e 7%,var(--panel2));color:#ff8777}
.person-style-label{display:block;margin-bottom:7px;color:var(--muted);font-size:10px;font-weight:650}.person-style-options{display:grid;grid-template-columns:1fr 1fr;gap:8px}.person-style-options button{min-height:38px;padding:8px;border:1px solid var(--line);border-radius:9px;background:color-mix(in srgb,var(--panel2) 58%,transparent);color:var(--muted);font-size:11px;font-weight:700;cursor:pointer}.person-style-options button:hover{border-color:color-mix(in srgb,var(--accent) 48%,var(--line));color:var(--text)}.person-style-options button.active{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 13%,var(--panel2));color:var(--text);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent) 26%,transparent)}

/* Export cards inherit every theme's panel, border, and type hierarchy. */
.export-grid button{color:var(--text);background:var(--panel2);border-color:var(--line)}
.export-grid button:hover{color:var(--text);background:color-mix(in srgb,var(--accent) 9%,var(--panel2));border-color:color-mix(in srgb,var(--accent) 52%,var(--line))}
.export-grid button span{color:inherit}
.export-grid button small{color:var(--muted)}
.export-grid b{background:color-mix(in srgb,var(--accent) 12%,var(--panel));color:var(--accent)}

/* Archive fields and saved-board cards use the active theme instead of dark fallbacks. */
.archive-name-field{color:var(--muted)}
.archive-name-field input{background:var(--panel2);border-color:var(--line);color:var(--text)}
.saved-board-card{background:var(--panel2);border-color:var(--line);color:var(--text)}
.saved-board-card:hover{background:color-mix(in srgb,var(--accent) 7%,var(--panel2));border-color:color-mix(in srgb,var(--accent) 44%,var(--line))}
.saved-board-card p,.saved-board-empty{color:var(--muted)}
.saved-board-empty b{color:var(--text)}

/* Canvas overview */
.minimap-content{position:absolute;inset:0;pointer-events:none}
.minimap{transition:width .18s ease,height .18s ease,border-radius .18s ease;box-shadow:0 15px 38px color-mix(in srgb,var(--shadow) 62%,transparent)}
.minimap::before{content:"";left:0;right:0;top:0;height:25px;padding:0;border-bottom:1px solid color-mix(in srgb,var(--line) 70%,transparent);background:color-mix(in srgb,var(--panel) 36%,transparent)}
.minimap-toggle{position:absolute;z-index:4;right:7px;top:4px;width:20px;height:17px;padding:0;border:1px solid transparent;border-radius:5px;background:transparent;color:var(--muted);font-size:14px;line-height:14px;cursor:pointer}
.minimap-expand{position:absolute;z-index:4;left:7px;top:4px;width:20px;height:17px;padding:0;border:1px solid transparent;border-radius:5px;background:transparent;color:var(--muted);font-size:12px;line-height:14px;cursor:pointer}
.minimap-toggle:hover,.minimap-expand:hover{background:color-mix(in srgb,var(--accent) 12%,var(--panel2));color:var(--text)}
.minimap.expanded{width:430px;height:280px}
.minimap.collapsed{width:30px;height:30px;border-radius:8px;cursor:default}
.minimap.collapsed::before,.minimap.collapsed .minimap-content,.minimap.collapsed #minimap-view,.minimap.collapsed .minimap-expand{display:none}
.minimap.collapsed .minimap-toggle{inset:0;width:100%;height:100%;font-size:17px;line-height:1}
.minimap :is(.minimap-node,.minimap-group,.minimap-line,.minimap-person-label){position:absolute;display:block;box-sizing:border-box;pointer-events:none}
.minimap-line{height:.4px;transform-origin:0 50%;background:var(--mini-line,var(--muted));opacity:var(--mini-opacity,.46)}
.minimap-group{border:1px solid color-mix(in srgb,var(--mini-color,var(--accent)) 70%,transparent);background:color-mix(in srgb,var(--mini-color,var(--accent)) 15%,transparent);border-radius:2px}
.minimap-node{border:1px solid color-mix(in srgb,var(--mini-color,var(--accent)) 75%,var(--line));background:color-mix(in srgb,var(--mini-color,var(--accent)) 42%,var(--panel));border-radius:2px;min-width:3px;min-height:3px}
.minimap-node.person{border-radius:50%}
.minimap-person-label{height:3px;border-radius:99px;background:color-mix(in srgb,var(--mini-color,var(--accent)) 32%,var(--panel));opacity:.9}

/* Asset folders */
.asset-folders{display:flex;align-items:center;gap:6px;min-width:0;margin:11px 0 2px;padding:2px 0 7px;overflow-x:auto;scrollbar-width:none}
.asset-folders::-webkit-scrollbar{display:none}
.asset-folder,.asset-folder-add{display:inline-flex;align-items:center;flex:0 0 auto;gap:4px;height:27px;padding:0 9px;border:1px solid var(--line);border-radius:7px;background:color-mix(in srgb,var(--panel2) 66%,transparent);color:var(--muted);font-size:10px;line-height:1;cursor:pointer}
.asset-folder:hover,.asset-folder-add:hover{border-color:color-mix(in srgb,var(--accent) 48%,var(--line));color:var(--text)}
.asset-folder.active{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 13%,var(--panel2));color:var(--text);font-weight:700}
.asset-folder.drag-target{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 20%,var(--panel2));box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 18%,transparent)}
.asset-folder i{display:grid;place-items:center;width:12px;height:12px;margin-right:-4px;border-radius:3px;color:var(--muted);font-size:12px;font-style:normal;line-height:1}
.asset-folder i:hover{background:color-mix(in srgb,#ff725e 14%,transparent);color:#ff8072}
.asset-folder-add{width:27px;padding:0;justify-content:center;border-style:dashed;color:var(--accent);font-size:15px}
.asset-bulkbar{display:grid;grid-template-columns:auto minmax(0,1fr) auto 27px;align-items:center;gap:6px;margin:1px 0 9px;padding:6px 7px;border:1px solid color-mix(in srgb,var(--accent) 30%,var(--line));border-radius:8px;background:color-mix(in srgb,var(--accent) 7%,var(--panel2));font-size:9px}.asset-bulkbar span{color:var(--text);font-weight:700;white-space:nowrap}.asset-bulkbar select{width:100%;min-width:0;height:27px;margin:0!important;padding:3px 6px!important;border-radius:6px!important;background:var(--panel)!important;color:var(--text);font-size:9px}.asset-bulkbar button{height:27px;padding:0 8px;border:1px solid color-mix(in srgb,var(--accent) 38%,var(--line));border-radius:6px;background:color-mix(in srgb,var(--accent) 15%,var(--panel2));color:var(--text);font-size:9px;font-weight:700;cursor:pointer}.asset-bulkbar #asset-bulk-clear{padding:0;font-size:15px;color:var(--muted)}.asset-card.selected{border-color:var(--accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 22%,transparent)}.asset-select{position:absolute;left:5px;top:5px;display:grid;place-items:center;width:22px;height:22px;padding:0;border:1px solid color-mix(in srgb,var(--line) 70%,#fff);border-radius:6px;background:color-mix(in srgb,var(--panel) 82%,transparent);color:var(--text);font-size:12px;font-weight:800;opacity:0;cursor:pointer}.asset-card:hover .asset-select,.asset-card.selected .asset-select{opacity:1}.asset-card.selected .asset-select{border-color:var(--accent);background:var(--accent);color:#fff}
.minimap-view{z-index:2;pointer-events:none}
