.user-node[data-v-02680250]{width:148px;height:68px;box-sizing:border-box;background:#fff;border-radius:10px;border:2px solid #cbd5e1;box-shadow:0 4px 10px #0f172a0f;display:flex;flex-direction:column;justify-content:center;padding:8px 12px;cursor:pointer;-webkit-user-select:none;user-select:none;transition:all .2s ease}.user-node.gender-male[data-v-02680250]{border-color:#60a5fa;background:linear-gradient(180deg,#eff6ff,#fff 55%)}.user-node.gender-female[data-v-02680250]{border-color:#f472b6;background:linear-gradient(180deg,#fdf2f8,#fff 55%)}.user-node.is-selected[data-v-02680250]{border-color:#f59e0b;border-width:2.5px;background:#fffbeb;box-shadow:0 0 0 4px #f59e0b40,0 8px 16px #0f172a1f;transform:translateY(-1px)}.row-name[data-v-02680250]{display:flex;align-items:center;justify-content:center;gap:5px;font-size:15px;font-weight:700;color:#1e293b;line-height:1.2;margin-bottom:6px}.gender-dot[data-v-02680250]{font-size:13px;font-weight:700}.gender-male .gender-dot[data-v-02680250]{color:#2563eb}.gender-female .gender-dot[data-v-02680250]{color:#db2777}.name-text[data-v-02680250]{max-width:78px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.level-tag[data-v-02680250]{font-size:10px;font-weight:500;color:#64748b;background:#f1f5f9;padding:1px 4px;border-radius:4px}.row-kinship[data-v-02680250]{display:flex;align-items:center;justify-content:center;min-height:20px;font-size:12px}.kinship-badge[data-v-02680250]{background:#eef2ff;color:#4338ca;font-weight:600;padding:1px 8px;border-radius:999px;border:1px solid #c7d2fe}.kinship-placeholder[data-v-02680250]{color:#94a3b8;font-size:11px}.kinship-empty[data-v-02680250]{display:inline-block;height:18px}.invisible-handle[data-v-02680250]{width:6px;height:6px;opacity:0;pointer-events:none}.junction-node[data-v-9314a8d2]{width:10px;height:10px;border-radius:50%;background:#ec4899;border:2px solid #ffffff;box-shadow:0 0 0 1px #ec4899;pointer-events:none}.center-handle[data-v-9314a8d2]{width:2px;height:2px;opacity:0;border:none;background:transparent}.user-search[data-v-39739e03]{position:relative;width:100%}.search-icon[data-v-39739e03]{position:absolute;left:10px;top:50%;transform:translateY(-50%);display:flex;color:#94a3b8;pointer-events:none;z-index:1}.search-input[data-v-39739e03]{width:100%;height:36px;padding:0 28px 0 30px;border:1px solid #cbd5e1;border-radius:7px;font-size:13px;outline:none;background:#fff;color:#0f172a;text-overflow:ellipsis}.search-input[data-v-39739e03]::placeholder{color:#94a3b8}.search-input[data-v-39739e03]:focus{border-color:#2563eb}.clear-btn[data-v-39739e03]{position:absolute;right:6px;top:50%;transform:translateY(-50%);width:18px;height:18px;padding:0;border:none;border-radius:50%;background:#e2e8f0;color:#475569;font-size:13px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center}.clear-btn[data-v-39739e03]:hover{background:#cbd5e1;color:#0f172a}.option-list[data-v-39739e03]{position:absolute;top:calc(100% + 4px);left:0;right:0;margin:0;padding:4px;list-style:none;max-height:220px;overflow-y:auto;background:#fff;border:1px solid #cbd5e1;border-radius:8px;box-shadow:0 12px 24px #0f172a1f;z-index:30}.option-list.is-drop-up[data-v-39739e03]{top:auto;bottom:calc(100% + 4px)}.option-item[data-v-39739e03]{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:7px 10px;border-radius:6px;font-size:13px;color:#334155;cursor:pointer}.option-item.is-active[data-v-39739e03]{background:#eff6ff}.option-item.is-chosen[data-v-39739e03]{color:#2563eb;font-weight:600}.option-name[data-v-39739e03]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.option-meta[data-v-39739e03]{flex-shrink:0;font-size:12px;font-weight:400;color:#94a3b8;white-space:nowrap}.hit[data-v-39739e03]{background:#fde68a;color:inherit;border-radius:3px;padding:0 1px}.option-empty[data-v-39739e03]{padding:10px 8px;text-align:center;font-size:12px;color:#94a3b8}*{box-sizing:border-box;margin:0;padding:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;color:#1e293b;background:#f8fafc}.app-container{width:100vw;height:100vh;display:flex;flex-direction:column;overflow:hidden}.top-toolbar{height:64px;background:#fff;border-bottom:1px solid #e2e8f0;padding:0 24px;display:flex;align-items:center;justify-content:space-between;z-index:10}.brand{display:flex;align-items:center;gap:12px}.brand-icon{font-size:26px}.brand-title{font-size:18px;font-weight:700;color:#0f172a}.brand-subtitle{font-size:12px;color:#64748b}.toolbar-actions{display:flex;align-items:center;gap:12px}.selected-indicator{font-size:13px;background:#fffbeb;color:#b45309;border:1px solid #fde68a;padding:6px 12px;border-radius:8px}.toolbar-divider{width:1px;height:22px;background:#e2e8f0}.hidden-file-input{display:none}.toast{position:absolute;top:18px;left:50%;transform:translate(-50%);padding:10px 18px;border-radius:10px;font-size:13px;font-weight:600;box-shadow:0 10px 24px #0f172a24;z-index:60;pointer-events:none}.toast-success{background:#ecfdf5;color:#047857;border:1px solid #a7f3d0}.toast-error{background:#fef2f2;color:#b91c1c;border:1px solid #fecaca}.toast-enter-active,.toast-leave-active{transition:opacity .2s ease,transform .2s ease}.toast-enter-from,.toast-leave-to{opacity:0;transform:translate(-50%,-6px)}.canvas-wrapper{flex:1;position:relative;background:#f8fafc}.empty-guide{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;pointer-events:none}.empty-card{pointer-events:auto;background:#fff;padding:28px 36px;border-radius:14px;border:1px solid #e2e8f0;box-shadow:0 10px 25px #0f172a0f;text-align:center;max-width:420px}.empty-card h3{font-size:18px;margin-bottom:8px}.empty-card p{font-size:13px;color:#64748b;line-height:1.6;margin-bottom:18px}.legend-box{position:absolute;right:20px;bottom:20px;background:#ffffffeb;border:1px solid #e2e8f0;border-radius:10px;padding:10px 14px;font-size:12px;color:#475569;display:flex;flex-direction:column;gap:6px;box-shadow:0 4px 12px #0000000a}.legend-item{display:flex;align-items:center;gap:8px}.line-sample{width:28px;height:0;display:inline-block}.spouse-line{border-top:2px dashed #ec4899}.child-line{border-top:2px solid #475569}.btn{padding:8px 16px;border-radius:8px;font-size:13px;font-weight:600;cursor:pointer;border:none;transition:all .15s}.btn-primary{background:#2563eb;color:#fff}.btn-primary:hover{background:#1d4ed8}.btn-secondary{background:#f1f5f9;color:#334155;border:1px solid #cbd5e1}.btn-secondary:hover{background:#e2e8f0}.btn-danger{background:#fee2e2;color:#dc2626}.btn-danger:hover{background:#fecaca}.btn-compact{padding:7px 12px;font-size:12px}.btn-with-icon{display:inline-flex;align-items:center;gap:5px}.btn-icon{width:14px;height:14px;flex-shrink:0;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.btn:disabled{opacity:.6;cursor:not-allowed}.btn-align{align-self:flex-end;height:36px}.btn-nowrap{flex-shrink:0;padding:0 16px;white-space:nowrap}.form-row .flex-1{min-width:0}.modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a73;display:flex;align-items:center;justify-content:center;z-index:100}.modal-card{background:#fff;width:440px;border-radius:14px;box-shadow:0 20px 40px #0f172a33;overflow:hidden}.modal-large{width:660px}.modal-header{padding:16px 22px;border-bottom:1px solid #e2e8f0;display:flex;align-items:center;justify-content:space-between}.modal-header h3{font-size:16px;font-weight:700}.close-btn{background:none;border:none;font-size:22px;color:#64748b;cursor:pointer}.modal-body{padding:20px 22px;max-height:75vh;overflow-y:auto}.section-block{margin-bottom:20px;padding-bottom:16px;border-bottom:1px dashed #e2e8f0}.section-block:last-of-type{border-bottom:none;margin-bottom:6px}.section-title{font-size:14px;font-weight:700;color:#0f172a;margin-bottom:10px}.section-tip{font-size:12px;color:#64748b;margin-bottom:12px;line-height:1.5}.form-group{margin-bottom:14px;display:flex;flex-direction:column;gap:6px}.form-row{display:flex;gap:12px;align-items:center}.form-row .form-group{margin-bottom:0}.flex-1{flex:1}.search-field{flex:1.4 1 0}.form-group label{font-size:12px;font-weight:600;color:#475569}.req{color:#ef4444}.form-group input[type=text]:not(.search-input),.form-group input[type=date],.form-group select{height:36px;padding:0 10px;border:1px solid #cbd5e1;border-radius:7px;font-size:13px;outline:none}.form-group input:focus,.form-group select:focus{border-color:#2563eb}.radio-group{display:flex;align-items:center;gap:20px;min-height:36px;padding-top:2px}.radio-label{display:flex;align-items:center;gap:6px;font-size:14px;cursor:pointer}.rel-list{list-style:none;display:flex;flex-direction:column;gap:8px}.rel-item{display:flex;align-items:center;justify-content:space-between;background:#f8fafc;border:1px solid #e2e8f0;padding:8px 12px;border-radius:8px;font-size:13px}.rel-badge{background:#e0e7ff;color:#3730a3;font-weight:600;padding:2px 8px;border-radius:6px;font-size:12px;margin-left:4px}.empty-rel{font-size:13px;color:#94a3b8;padding:8px 0}.btn-text-danger{background:none;border:none;color:#ef4444;font-size:12px;font-weight:600;cursor:pointer}.btn-text-danger:hover{text-decoration:underline}.error-msg{color:#dc2626;background:#fef2f2;border:1px solid #fecaca;padding:8px 12px;border-radius:8px;font-size:12px;margin-top:10px}.import-file{font-size:12px;color:#64748b;margin-bottom:10px;word-break:break-all}.import-loading{font-size:13px;color:#64748b}.import-summary{font-size:13px;color:#0f172a;line-height:1.6;margin-bottom:8px}.import-warn{font-size:12px;color:#b45309;background:#fffbeb;border:1px solid #fde68a;border-radius:8px;padding:8px 10px;line-height:1.6;margin-bottom:10px}.import-tip{font-size:12px;color:#64748b;margin-bottom:10px}.import-errors{list-style:none;display:flex;flex-direction:column;gap:6px;max-height:220px;overflow-y:auto;font-size:12px;line-height:1.5;color:#b91c1c}.import-errors li{background:#fef2f2;border:1px solid #fecaca;border-radius:6px;padding:6px 10px}.import-warnings{color:#b45309}.import-warnings li{background:#fffbeb;border-color:#fde68a}.modal-footer{padding:14px 22px;background:#f8fafc;border-top:1px solid #e2e8f0;display:flex;justify-content:flex-end;gap:10px}.modal-footer-between{justify-content:space-between}.vue-flow{position:relative;width:100%;height:100%;overflow:hidden;z-index:0;direction:ltr}.vue-flow__container{position:absolute;height:100%;width:100%;left:0;top:0}.vue-flow__pane{z-index:1}.vue-flow__pane.draggable{cursor:grab}.vue-flow__pane.selection{cursor:pointer}.vue-flow__pane.dragging{cursor:grabbing}.vue-flow__transformationpane{transform-origin:0 0;z-index:2;pointer-events:none}.vue-flow__viewport{z-index:4;overflow:clip}.vue-flow__selection{z-index:6}.vue-flow__edge-labels{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vue-flow__nodesselection-rect:focus,.vue-flow__nodesselection-rect:focus-visible{outline:none}.vue-flow .vue-flow__edges{pointer-events:none;overflow:visible}.vue-flow__edge-path,.vue-flow__connection-path{stroke:#b1b1b7;stroke-width:1;fill:none}.vue-flow__edge{pointer-events:visibleStroke;cursor:pointer}.vue-flow__edge.animated path{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.vue-flow__edge.animated path.vue-flow__edge-interaction{stroke-dasharray:none;animation:none}.vue-flow__edge.inactive{pointer-events:none}.vue-flow__edge.selected,.vue-flow__edge:focus,.vue-flow__edge:focus-visible{outline:none}.vue-flow__edge.selected .vue-flow__edge-path,.vue-flow__edge:focus .vue-flow__edge-path,.vue-flow__edge:focus-visible .vue-flow__edge-path{stroke:#555}.vue-flow__edge-textwrapper{pointer-events:all}.vue-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vue-flow__connection{pointer-events:none}.vue-flow__connection .animated{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.vue-flow__connectionline{z-index:1001}.vue-flow__nodes{pointer-events:none;transform-origin:0 0}.vue-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default}.vue-flow__node.draggable{cursor:grab;pointer-events:all}.vue-flow__node.draggable.dragging{cursor:grabbing}.vue-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.vue-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:grab}.vue-flow__nodesselection-rect.dragging{cursor:grabbing}.vue-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px}.vue-flow__handle.connectable{pointer-events:all;cursor:crosshair}.vue-flow__handle-bottom{left:50%;bottom:0;transform:translate(-50%,50%)}.vue-flow__handle-top{left:50%;top:0;transform:translate(-50%,-50%)}.vue-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.vue-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.vue-flow__edgeupdater{cursor:move;pointer-events:all}.vue-flow__panel{position:absolute;z-index:5;margin:15px}.vue-flow__panel.top{top:0}.vue-flow__panel.bottom{bottom:0}.vue-flow__panel.left{left:0}.vue-flow__panel.right{right:0}.vue-flow__panel.center{left:50%;transform:translate(-50%)}@keyframes dashdraw{0%{stroke-dashoffset:10}}:root{--vf-node-bg: #fff;--vf-node-text: #222;--vf-connection-path: #b1b1b7;--vf-handle: #555}.vue-flow__edge.updating .vue-flow__edge-path{stroke:#777}.vue-flow__edge-text{font-size:10px}.vue-flow__edge-textbg{fill:#fff}.vue-flow__connection-path{stroke:var(--vf-connection-path)}.vue-flow__node{cursor:grab}.vue-flow__node.selectable:focus,.vue-flow__node.selectable:focus-visible{outline:none}.vue-flow__node-default,.vue-flow__node-input,.vue-flow__node-output{padding:10px;border-radius:3px;width:150px;font-size:12px;text-align:center;border-width:1px;border-style:solid;color:var(--vf-node-text);background-color:var(--vf-node-bg);border-color:var(--vf-node-color)}.vue-flow__node-default.selected,.vue-flow__node-default.selected:hover,.vue-flow__node-input.selected,.vue-flow__node-input.selected:hover,.vue-flow__node-output.selected,.vue-flow__node-output.selected:hover{box-shadow:0 0 0 .5px var(--vf-box-shadow)}.vue-flow__node-default.selected,.vue-flow__node-default:focus,.vue-flow__node-default:focus-visible,.vue-flow__node-input.selected,.vue-flow__node-input:focus,.vue-flow__node-input:focus-visible,.vue-flow__node-output.selected,.vue-flow__node-output:focus,.vue-flow__node-output:focus-visible{outline:none;border:1px solid #555}.vue-flow__node-default .vue-flow__handle,.vue-flow__node-input .vue-flow__handle,.vue-flow__node-output .vue-flow__handle{background:var(--vf-handle)}.vue-flow__node-default.selectable:hover,.vue-flow__node-input.selectable:hover,.vue-flow__node-output.selectable:hover{box-shadow:0 1px 4px 1px #00000014}.vue-flow__node-input{--vf-node-color: var(--vf-node-color, #0041d0);--vf-handle: var(--vf-node-color, #0041d0);--vf-box-shadow: var(--vf-node-color, #0041d0);background:var(--vf-node-bg);border-color:var(--vf-node-color, #0041d0)}.vue-flow__node-input.selected,.vue-flow__node-input:focus,.vue-flow__node-input:focus-visible{outline:none;border:1px solid var(--vf-node-color, #0041d0)}.vue-flow__node-default{--vf-handle: var(--vf-node-color, #1a192b);--vf-box-shadow: var(--vf-node-color, #1a192b);background:var(--vf-node-bg);border-color:var(--vf-node-color, #1a192b)}.vue-flow__node-default.selected,.vue-flow__node-default:focus,.vue-flow__node-default:focus-visible{outline:none;border:1px solid var(--vf-node-color, #1a192b)}.vue-flow__node-output{--vf-handle: var(--vf-node-color, #ff0072);--vf-box-shadow: var(--vf-node-color, #ff0072);background:var(--vf-node-bg);border-color:var(--vf-node-color, #ff0072)}.vue-flow__node-output.selected,.vue-flow__node-output:focus,.vue-flow__node-output:focus-visible{outline:none;border:1px solid var(--vf-node-color, #ff0072)}.vue-flow__nodesselection-rect,.vue-flow__selection{background:#0059dc14;border:1px dotted rgba(0,89,220,.8)}.vue-flow__nodesselection-rect:focus,.vue-flow__nodesselection-rect:focus-visible,.vue-flow__selection:focus,.vue-flow__selection:focus-visible{outline:none}.vue-flow__handle{width:6px;height:6px;background:var(--vf-handle);border:1px solid #fff;border-radius:100%}.vue-flow__controls{box-shadow:0 0 2px 1px #00000014}.vue-flow__controls-button{background:#fefefe;border:none;border-bottom:1px solid #eee;box-sizing:content-box;display:flex;justify-content:center;align-items:center;width:16px;height:16px;cursor:pointer;-webkit-user-select:none;user-select:none;padding:5px}.vue-flow__controls-button svg{width:100%;max-width:12px;max-height:12px}.vue-flow__controls-button:hover{background:#f4f4f4}.vue-flow__controls-button:disabled{pointer-events:none}.vue-flow__controls-button:disabled svg{fill-opacity:.4}
