*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--bg-primary:#0f0f1e;--bg-secondary:#12121f;--bg-tertiary:#1a1a2e;--bg-hover:#1e2840;--bg-active:#1e3a6e;--border-color:#1e2840;--border-light:#334;--text-primary:#ccd;--text-secondary:#aabbd0;--text-muted:#56a;--text-link:#c8e0ff;--text-danger:#e04040;--text-warning:#e08080;--scrollbar-track:#0f0f1e;--scrollbar-thumb:#2a3a5a}:root.theme-light{--bg-primary:#f5f5f7;--bg-secondary:#fff;--bg-tertiary:#e8e8ec;--bg-hover:#e0e0e6;--bg-active:#d0d0e0;--border-color:#d0d0d8;--border-light:#e0e0e8;--text-primary:#1a1a2e;--text-secondary:#4a4a6e;--text-muted:#88a;--text-link:#3a5a9a;--text-danger:#c03030;--text-warning:#a05050;--scrollbar-track:#f0f0f4;--scrollbar-thumb:#c0c0d0}html,body,#root{background:var(--bg-primary);width:100%;height:100%;color:var(--text-primary);font-family:Segoe UI,Inter,system-ui,sans-serif;font-size:13px;transition:background .2s,color .2s;overflow:hidden}button{font-family:inherit;font-size:inherit}input,select,textarea{font-family:inherit;font-size:inherit;color:inherit}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:var(--scrollbar-track)}::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}@keyframes previewFadeIn{0%{opacity:0;transform:translate(-8px)}to{opacity:1;transform:translate(0)}}.composite-preview{animation:.2s ease-out previewFadeIn}.app-layout{background:var(--bg-primary);width:100vw;height:100vh;color:var(--text-primary);flex-direction:column;font-family:Segoe UI,Inter,system-ui,sans-serif;display:flex;overflow:hidden}.main-area{flex:1;display:flex;overflow:hidden}.left-sidebar{border-right:1px solid var(--border-color);background:var(--bg-secondary);flex-direction:column;width:220px;min-width:200px;max-width:260px;display:flex;overflow-y:auto}.canvas-area{flex:1;position:relative;overflow:hidden}.right-sidebar{border-left:1px solid var(--border-color);background:var(--bg-secondary);flex-direction:column;width:240px;min-width:220px;max-width:280px;display:flex;overflow-y:auto}.toolbar{background:var(--bg-primary);border-bottom:1px solid #1e2840;flex-shrink:0;align-items:center;gap:6px;height:44px;padding:0 12px;display:flex}.toolbar-logo{color:var(--text-link);margin-right:4px;font-size:15px;font-weight:700}.toolbar-divider{background:var(--bg-hover);width:1px;height:24px;margin:0 4px}.toolbar-btn{background:var(--bg-tertiary);color:var(--text-secondary);cursor:pointer;white-space:nowrap;border:1px solid #2a3a5a;border-radius:5px;padding:4px 10px;font-size:12px;transition:background .15s,color .15s}.toolbar-btn:hover{background:var(--bg-hover);color:var(--text-link)}.toolbar-select{background:var(--bg-tertiary);color:var(--text-secondary);cursor:pointer;border:1px solid #2a3a5a;border-radius:5px;padding:4px 8px;font-size:12px;transition:background .15s,color .15s,border-color .15s}.toolbar-select:hover{background:var(--bg-hover);color:var(--text-link);border-color:#4a80d0}.toolbar-select:focus{border-color:#4a80d0;outline:none}.panel{border-bottom:1px solid var(--border-color);flex-shrink:0;padding:8px 8px 12px}.panel-header{letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);border-bottom:1px solid var(--border-color);cursor:pointer;-webkit-user-select:none;user-select:none;justify-content:space-between;align-items:center;margin-bottom:8px;padding-bottom:4px;font-size:11px;font-weight:700;display:flex}.panel-header:hover{color:var(--text-muted)}.panel-header .collapse-icon{font-size:10px;transition:transform .2s}.panel.collapsed .panel-header{margin-bottom:0}.panel.collapsed .panel-body{display:none}.node-palette{flex:1;overflow-y:auto}.cat-header{background:var(--bg-tertiary);cursor:pointer;border:1px solid #2a2a4a;border-radius:4px;justify-content:space-between;align-items:center;width:100%;margin-bottom:2px;padding:4px 8px;font-size:12px;font-weight:600;transition:background .15s;display:flex}.cat-header:hover{background:var(--bg-hover)}.palette-item{cursor:grab;-webkit-user-select:none;user-select:none;border:1px solid;border-radius:4px;align-items:center;margin-bottom:2px;padding:4px 8px;font-size:11px;transition:opacity .15s;display:flex}.palette-item:hover{opacity:.85}.palette-item:active{cursor:grabbing}.cat-header,.cat-header *,.palette-item,.palette-item *{-webkit-user-select:none;user-select:none}.tree-manager{flex-shrink:0}.tree-item{cursor:pointer;border:1px solid #0000;border-radius:4px;align-items:center;gap:4px;padding:4px 6px;font-size:12px;transition:background .15s;display:flex}.tree-item:hover{background:var(--bg-tertiary)}.tree-item.active{background:var(--bg-hover);color:var(--text-link);border-color:#2a4a7a}.tree-btn{color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:2px;padding:1px 3px;font-size:12px;line-height:1.2}.tree-btn:hover{color:var(--text-link);background:var(--bg-hover)}.tree-btn.danger:hover{color:var(--text-danger);background:var(--bg-active)}.properties-panel{flex:1;overflow-y:auto}.debug-panel{flex-shrink:0}.btn-primary{background:var(--bg-active);color:var(--text-link);cursor:pointer;border:1px solid #2a5a9a;border-radius:4px;padding:4px 10px;font-size:12px;transition:background .15s}.btn-primary:hover{background:var(--bg-active)}.btn-primary:disabled{opacity:.4;cursor:not-allowed}.btn-secondary{background:var(--bg-tertiary);color:var(--text-secondary);cursor:pointer;border:1px solid #2a3a5a;border-radius:4px;padding:4px 8px;font-size:12px;transition:background .15s}.btn-secondary:hover{background:var(--bg-hover);color:var(--text-link)}.btn-secondary:disabled{opacity:.4;cursor:not-allowed}.btn-danger{background:var(--bg-active);color:var(--text-warning);cursor:pointer;border:1px solid #5a2a2a;border-radius:4px;padding:4px 8px;font-size:12px;transition:background .15s}.btn-danger:hover{background:var(--bg-active);color:#ff8080}.react-flow__attribution{display:none}.context-menu{background:var(--bg-tertiary);z-index:1000;border:1px solid #2a3a5a;border-radius:6px;min-width:140px;padding:4px 0;box-shadow:0 4px 16px #00000080}.context-menu-item{width:100%;color:var(--text-secondary);cursor:pointer;text-align:left;background:0 0;border:none;align-items:center;gap:8px;padding:6px 12px;font-size:12px;transition:background .1s,color .1s;display:flex}.context-menu-item:hover:not(:disabled){background:var(--bg-hover);color:var(--text-link)}.context-menu-item.danger:hover:not(:disabled){background:var(--bg-active);color:var(--text-danger)}.context-menu-item:disabled{opacity:.4;cursor:not-allowed}.context-menu-icon{text-align:center;width:20px;font-size:14px}.context-menu-label{flex:1}.context-menu-separator{background:#2a3a5a;height:1px;margin:4px 8px}.context-menu-arrow{opacity:.6;font-size:9px}.context-menu-submenu{background:var(--bg-tertiary);z-index:1001;border:1px solid #2a3a5a;border-radius:6px;min-width:160px;padding:4px 0;position:absolute;top:0;left:100%;box-shadow:0 4px 16px #00000080}.context-menu-has-submenu{position:relative}.bt-edge-delete-group{opacity:0;transition:opacity .15s}.bt-edge-delete-group>g{transform-box:fill-box;transform-origin:50%;transition:transform .15s}.bt-edge-delete-group:hover{opacity:1}.bt-edge-delete-group:hover>g{transform:scale(1.2)}.bt-edge-delete-group:hover circle{fill:#ff6b6b;stroke:#fff;stroke-width:1.2px}.bt-edge-delete-group:hover path{stroke:#fff;stroke-width:1.8px}.canvas-toolbar-column{z-index:5;border:1px solid var(--border-light);background:#1a1a2e;border-radius:6px;flex-direction:column;gap:4px;padding:4px;display:flex;position:absolute;bottom:16px;left:16px;box-shadow:0 2px 8px #00000073}.canvas-square-btn{background:var(--bg-tertiary);width:32px;height:32px;color:var(--text-secondary);cursor:pointer;border:1px solid #0000;border-radius:4px;justify-content:center;align-items:center;padding:0;font-family:monospace;font-size:16px;line-height:1;transition:background .15s,color .15s,border-color .15s,transform .1s;display:inline-flex}.canvas-square-btn:hover:not(:disabled){background:var(--bg-hover);color:var(--text-link);border-color:#4a80d0}.canvas-square-btn:active:not(:disabled){background:var(--bg-active);transform:scale(.95)}.canvas-square-btn:disabled{opacity:.4;cursor:not-allowed}.canvas-square-btn-zoom-label{color:var(--text-link);font-variant-numeric:tabular-nums;background:#0f1424;font-size:11px}.canvas-square-divider{background:var(--border-light);height:1px;margin:2px 4px}.toolbar-toggle-group{background:var(--bg-tertiary);border:1px solid #2a3a5a;border-radius:5px;display:inline-flex;overflow:hidden}.toolbar-toggle-btn{color:var(--text-secondary);cursor:pointer;white-space:nowrap;background:0 0;border:none;align-items:center;gap:4px;padding:4px 10px;font-size:12px;transition:background .15s,color .15s;display:inline-flex}.toolbar-toggle-btn+.toolbar-toggle-btn{border-left:1px solid #2a3a5a}.toolbar-toggle-btn:hover{background:var(--bg-hover);color:var(--text-link)}.toolbar-toggle-btn.active{background:var(--bg-active);color:var(--text-link)}.toolbar-toggle-icon{font-size:12px;line-height:1}.modal-content.xml-preview-modal{border-radius:0;width:100vw;max-width:100vw;height:100vh;max-height:100vh}.xml-preview-toolbar{background:var(--bg-secondary);border-bottom:1px solid #2a3a5a;flex-shrink:0;justify-content:space-between;align-items:center;gap:12px;padding:8px 16px;display:flex}.xml-preview-stats{color:#67a;font-family:monospace;font-size:11px}.xml-preview-actions{gap:6px;display:flex}.xml-preview-body{background:#1e1e1e;min-height:0;padding:0;overflow:hidden}.xml-preview-body>*{height:100%}.xml-preview-pre{color:#c8d4e6;margin:0;padding:12px 0;font-family:JetBrains Mono,Cascadia Code,Consolas,monospace;font-size:12px;line-height:1.55}.xml-preview-line{white-space:pre;align-items:flex-start;padding:0 16px;display:flex}.xml-preview-line:hover{background:#4a80d00f}.xml-preview-lineno{text-align:right;color:#457;-webkit-user-select:none;user-select:none;border-right:1px solid #1e2840;flex-shrink:0;min-width:42px;margin-right:12px;padding-right:16px;display:inline-block}.xml-preview-code{white-space:pre;flex:1;overflow-x:auto}.xml-preview-empty{text-align:center;color:#567;padding:60px 20px;font-size:13px;font-style:italic}.theme-light .xml-preview-body{background:#fafbfc}.theme-light .xml-preview-pre{color:#2a3a4e}.theme-light .xml-preview-lineno{color:#aab;border-right-color:#e0e4ec}.theme-light .xml-preview-line:hover{background:#4a80d014}.node-picker{background:var(--bg-tertiary);border:1px solid #2a3a5a;border-radius:8px;overflow:hidden;box-shadow:0 4px 20px #0009}.node-picker-search{background:var(--bg-tertiary);border-bottom:1px solid #2a3a5a;padding:8px}.node-picker-input{border:1px solid var(--border-light);width:100%;color:var(--text-primary);box-sizing:border-box;background:#0d0d1a;border-radius:4px;padding:6px 10px;font-size:12px}.node-picker-input:focus{border-color:#4a80d0;outline:none}.node-picker-input::placeholder{color:var(--text-muted)}.node-picker-list{max-height:340px;overflow-y:auto}.node-picker-category{padding:4px 0}.node-picker-category-header{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.06em;padding:4px 10px;font-size:10px;font-weight:600}.node-picker-item{cursor:pointer;transition:background: .1s;border-left:3px solid #0000;padding:6px 10px 6px 14px}.node-picker-item:hover{background:var(--bg-hover)}.node-picker-item-type{color:var(--text-primary);font-family:monospace;font-size:12px;display:block}.node-picker-item-desc{color:#667;white-space:nowrap;text-overflow:ellipsis;margin-top:2px;font-size:10px;display:block;overflow:hidden}.node-picker-empty{text-align:center;color:#667;padding:20px;font-size:12px}.modal-backdrop{z-index:1000;background:#000000b3;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal-content{background:var(--bg-tertiary);border:1px solid #2a3a5a;border-radius:8px;flex-direction:column;min-width:360px;max-width:480px;max-height:80vh;display:flex;box-shadow:0 8px 32px #00000080}.modal-header{border-bottom:1px solid #2a3a5a;justify-content:space-between;align-items:center;padding:12px 16px;display:flex}.modal-title{align-items:center;gap:8px;display:flex}.modal-node-type{color:var(--text-link);font-size:14px;font-weight:600}.modal-instance-id{color:var(--text-muted);font-family:monospace;font-size:11px}.modal-close{color:#667;cursor:pointer;background:0 0;border:none;padding:0;font-size:20px;line-height:1}.modal-close:hover{color:var(--text-primary)}.modal-body{flex:1;padding:16px;overflow-y:auto}.modal-footer{border-top:1px solid #2a3a5a;justify-content:flex-end;gap:8px;padding:12px 16px;display:flex}.form-group{margin-bottom:16px}.form-group>label{color:#67a;text-transform:uppercase;letter-spacing:.06em;margin-bottom:6px;font-size:11px;display:block}.form-group input[type=text],.form-group input[type=number],.form-group select{background:var(--bg-tertiary);border:1px solid var(--border-light);width:100%;color:var(--text-primary);box-sizing:border-box;border-radius:4px;padding:6px 8px;font-size:13px}.form-group input:focus,.form-group select:focus{border-color:#4a80d0;outline:none}.form-group select{cursor:pointer}.form-hint{color:var(--text-muted);margin-top:4px;font-size:10px;display:block}.form-hint code{color:#8ac;background:var(--bg-tertiary);border-radius:3px;padding:1px 4px}.port-row{align-items:flex-start;gap:8px;margin-bottom:8px;display:flex}.port-label{min-width:100px;padding-top:6px}.port-name{color:var(--text-secondary);font-size:12px}.port-direction{color:var(--text-muted);margin-left:4px;font-size:10px}.port-desc{width:100%;margin-top:2px;display:block}.info-text{color:var(--text-secondary);background:var(--bg-tertiary);border-radius:4px;padding:8px 10px;font-size:12px;line-height:1.5}.node-model-modal{width:520px;max-width:95vw}.node-edit-modal{width:480px;max-width:95vw}.edit-section{background:var(--bg-tertiary);border:1px solid #2a3a5a;border-radius:6px;margin-bottom:16px;padding:10px 12px}.edit-section-title{color:#8ac;text-transform:uppercase;letter-spacing:.06em;align-items:center;gap:8px;margin-bottom:8px;font-size:11px;font-weight:600;display:flex}.section-hint{color:var(--text-muted);text-transform:none;letter-spacing:0;font-size:9px;font-weight:400}.condition-row{align-items:center;gap:8px;margin-bottom:6px;display:flex}.condition-row:last-child{margin-bottom:0}.condition-label{min-width:90px;color:var(--text-secondary);flex-shrink:0;font-size:11px}.condition-row input{background:var(--bg-tertiary);border:1px solid var(--border-light);color:var(--text-primary);border-radius:4px;flex:1;padding:4px 8px;font-family:monospace;font-size:11px}.condition-row input:focus{border-color:#4a80d0;outline:none}.condition-row input::placeholder{color:#445}.checkbox-label{color:#aac;cursor:pointer;align-items:center;gap:6px;font-size:12px;display:flex}.checkbox-label input[type=checkbox]{accent-color:#4a80d0;width:14px;height:14px}.input-disabled{opacity:.5;cursor:not-allowed}.palette-item-wrapper{align-items:center;gap:2px;display:flex}.palette-item-wrapper .palette-item{flex:1;min-width:0}.palette-item-actions{opacity:0;gap:1px;transition:opacity .15s;display:flex}.palette-item-wrapper:hover .palette-item-actions{opacity:1}.palette-item-btn{border:1px solid var(--border-light);color:#667;cursor:pointer;background:0 0;border-radius:3px;padding:2px 4px;font-size:10px;transition:all .1s}.palette-item-btn:hover{background:var(--bg-hover);color:var(--text-link);border-color:#4a80d0}.palette-item-btn.danger:hover{background:var(--bg-active);color:var(--text-danger);border-color:var(--text-danger)}.form-row{gap:12px;display:flex}.form-row .form-group{flex:1}.ports-header{justify-content:space-between;align-items:center;margin-bottom:8px;display:flex}.ports-header label{color:#67a;text-transform:uppercase;letter-spacing:.06em;font-size:11px}.ports-count{color:#8ac;margin-left:4px}.btn-add-port{border:1px solid var(--border-light);color:#8ac;cursor:pointer;background:0 0;border-radius:4px;padding:3px 10px;font-size:11px;transition:all .15s}.btn-add-port:hover{background:var(--bg-hover);color:var(--text-link);border-color:#4a80d0}.ports-list{flex-direction:column;gap:8px;display:flex}.port-item{background:var(--bg-tertiary);border:1px solid #2a3a5a;border-radius:6px;padding:10px}.port-item-header{justify-content:space-between;align-items:center;margin-bottom:8px;display:flex}.port-index{color:var(--text-muted);font-family:monospace;font-size:10px}.btn-remove-port{color:var(--text-danger);cursor:pointer;background:0 0;border:none;border-radius:3px;padding:2px 4px;font-size:12px;transition:background .1s}.btn-remove-port:hover{background:var(--bg-active)}.port-item-body{gap:8px;margin-bottom:6px;display:flex}.port-field{flex-direction:column;gap:3px;display:flex}.port-field label{color:var(--text-muted);text-transform:uppercase;font-size:9px}.port-field input,.port-field select{background:var(--bg-tertiary);border:1px solid var(--border-light);color:var(--text-primary);border-radius:4px;padding:4px 6px;font-size:11px}.port-field input:focus,.port-field select:focus{border-color:#4a80d0;outline:none}.port-field-name{flex:2}.port-field-dir{flex-shrink:0;width:80px}.port-field-type{flex-shrink:0;width:90px}.port-field-default{flex:1}.port-field-desc{flex:2}.port-item-body .port-field-name{flex:2;min-width:0}.port-item-body .port-field-dir{flex-shrink:0;width:80px}.port-item-body .port-field-type{flex-shrink:0;width:90px}.port-item-body .port-field-default{flex:1;min-width:0}.ports-empty{text-align:center;color:var(--text-muted);background:var(--bg-tertiary);border:1px dashed #334;border-radius:6px;padding:16px;font-size:11px}.node-preview{border-top:1px solid #2a3a5a;margin-top:12px;padding-top:12px}.preview-label{color:var(--text-muted);text-transform:uppercase;letter-spacing:.06em;margin-bottom:8px;font-size:10px}.preview-node{text-align:center;border:2px solid;border-radius:6px;padding:8px 12px}.preview-category{opacity:.7;text-transform:uppercase;letter-spacing:.05em;margin-bottom:2px;font-size:9px}.preview-type{font-family:monospace;font-size:14px;font-weight:600}.preview-desc{opacity:.8;margin-top:2px;font-size:10px}.preview-ports{text-align:left;border-top:1px solid #ffffff1a;flex-direction:column;gap:2px;margin-top:6px;padding-top:6px;display:flex}.preview-port{align-items:center;gap:6px;font-size:10px;display:flex}.preview-port-dir{opacity:.6;text-transform:uppercase;font-size:8px}.preview-port-name{color:#ffe080;font-family:monospace}.port-view-row{align-items:center;gap:8px;margin-top:4px;display:flex}.port-def{flex-wrap:wrap;flex:1;align-items:baseline;gap:4px;font-size:11px;display:flex}.port-def-dir{color:var(--text-muted);text-transform:uppercase;font-family:monospace;font-size:9px}.port-def-name{color:#aac;font-family:monospace;font-weight:500}.port-def-desc{color:#667;font-size:10px;font-style:italic}.port-def-default{color:var(--text-muted);font-size:9px}.port-value-input{flex-shrink:0;width:100px}.port-value-input input{box-sizing:border-box;background:var(--bg-tertiary);border:1px solid var(--border-light);color:#ffe080;border-radius:4px;width:100%;padding:4px 6px;font-family:monospace;font-size:11px}.port-value-input input:focus{border-color:#4a80d0;outline:none}.preview-port-default{opacity:.6;font-size:9px}
