:root{--bg:#09090b;--bg-2:#18181b;--panel:#18181b;--panel-2:#27272a;--border:#3f3f46;--text:#fafafa;--muted:#a1a1aa;--accent:#22d3ee;--accent-2:#06b6d4;--accent-subtle:#06b6d41f;--accent-subtle-hover:#06b6d414;--accent-muted:#06b6d426;--accent-strong:#06b6d424;--accent-border-soft:#06b6d433;--accent-border:#06b6d459;--accent-border-strong:#06b6d473;--accent-focus:#06b6d42e;--accent-focus-soft:#06b6d424;--accent-active:#06b6d438;--accent-panel:#06b6d43d;--accent-shadow:#06b6d41f;--canvas-accent:#5b8cff;--canvas-accent-2:#7cc4ff;--canvas-accent-subtle:#5b8cff1f;--canvas-accent-strong:#5b8cff33;--canvas-accent-border:#5b8cff59;--canvas-accent-border-strong:#5b8cff8c;--canvas-accent-glow:#5b8cff73;--canvas-accent-glow-strong:#5b8cffd9;--canvas-accent-2-glow:#7cc4ff73;--canvas-accent-2-glow-strong:#7cc4ffa6;--canvas-accent-2-glow-soft:#7cc4ffbf;--danger:#f87171;--ok:#34d399;--sidebar-w:260px;--sidebar-left-w:195px;--sidebar-right-w:286px;--sidebar-collapsed:44px;--sidebar-bg:#18181b;--sidebar-hover-bg:#ffffff1a;--sidebar-active-bg:#f4f4f5;--sidebar-active-border:transparent;--sidebar-active-text:#18181b;--topbar-bg:#09090bcc;--topbar-border:#27272acc;--canvas-bg:#09090b;--toolbar-bg:#18181beb;--input-bg:#27272a;--minimap-bg:#18181bf2;--minimap-canvas-bg:var(--canvas-bg);--modal-backdrop:#0000008c;--node-label-fill:#e6ecff;--node-label-stroke:#000000a6;--entity-core-stroke:#00000059}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{color:var(--text);background:var(--bg);min-height:100%;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;overflow:hidden}button,input{font:inherit}:root[data-theme=light]{--bg:#fafafa;--bg-2:#f4f4f5;--panel:#fff;--panel-2:#f4f4f5;--border:#e4e4e7;--text:#18181b;--muted:#71717a;--accent:#0891b2;--accent-2:#0e7490;--accent-subtle:#0891b21a;--accent-subtle-hover:#0891b20f;--accent-muted:#0891b21f;--accent-strong:#0891b21f;--accent-border-soft:#0891b233;--accent-border:#0891b247;--accent-border-strong:#0891b259;--accent-focus:#0891b22e;--accent-focus-soft:#0891b224;--accent-active:#0891b229;--accent-panel:#0891b233;--accent-shadow:#0891b214;--canvas-accent:#5b8cff;--canvas-accent-2:#3b6bff;--danger:#dc2626;--sidebar-bg:#f4f4f5;--sidebar-hover-bg:#e4e4e7;--sidebar-active-bg:#e4e4e7;--sidebar-active-border:transparent;--sidebar-active-text:#18181b;--topbar-bg:#fafafacc;--topbar-border:#e4e4e7cc;--canvas-bg:#fafafa;--toolbar-bg:#ffffffeb;--input-bg:#fff;--minimap-bg:#fffffff2;--minimap-canvas-bg:var(--canvas-bg);--modal-backdrop:#18181b59;--node-label-fill:#0b1020;--node-label-stroke:#fffffff2;--entity-core-stroke:#0000001f}[data-theme=light] body{background:var(--bg)}[data-theme=light] ::-webkit-scrollbar-thumb{background:#d4d4d8}[data-theme=light] ::-webkit-scrollbar-thumb:hover{background:#a1a1aa}.app-shell{flex-direction:column;height:100%;display:flex}.topbar{border-bottom:1px solid var(--topbar-border);background:var(--topbar-bg);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);flex-shrink:0;justify-content:space-between;align-items:center;height:56px;padding:0 20px;display:flex}.topbar-actions{align-items:center;gap:8px;display:flex}.topbar-view-toggles{border-right:1px solid var(--topbar-border);align-items:center;gap:14px;margin-right:4px;padding-right:12px;display:flex}.topbar-unclump-btn{white-space:nowrap;margin-right:2px}.topbar-unclump-btn:disabled{opacity:.45;cursor:not-allowed}.topbar-view-toggle{color:var(--muted);cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap;align-items:center;gap:7px;font-size:12px;font-weight:500;line-height:1;display:inline-flex}.topbar-view-toggle:hover{color:var(--text)}.topbar-view-toggle input{width:14px;height:14px;accent-color:var(--accent);cursor:pointer;margin:0}.btn.btn-icon{place-items:center;width:36px;height:36px;padding:0;line-height:0;display:grid}.btn.btn-icon svg,.btn.btn-icon .topbar-transfer-icon{display:block}.topbar-transfer-icon{opacity:.88;filter:brightness(0)invert(.88)}[data-theme=light] .topbar-transfer-icon{filter:none;opacity:1}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.brand{align-items:center;gap:14px;display:flex}.brand-logo{filter:invert();flex-shrink:0;width:auto;height:23px;display:block}[data-theme=light] .brand-logo{filter:none}.app-main{flex:1;grid-template-columns:auto 1fr auto;gap:0;min-height:0;padding:12px;display:grid;overflow:hidden}.sidebar{width:var(--sidebar-w);border:1px solid var(--border);background:var(--sidebar-bg);z-index:2;border-radius:14px;flex-shrink:0;height:100%;transition:width .28s cubic-bezier(.4,0,.2,1);position:relative;overflow:visible}.sidebar.collapsed{width:var(--sidebar-collapsed)}.sidebar-inner{opacity:1;border-radius:inherit;height:100%;padding:14px;transition:opacity .2s;overflow:auto}.sidebar.collapsed .sidebar-inner{opacity:0;pointer-events:none}.sidebar-toggle{border:1px solid var(--border);background:var(--panel-2);width:28px;height:28px;color:var(--muted);cursor:pointer;z-index:3;border-radius:8px 0 0 8px;place-items:center;font-size:14px;line-height:1;transition:color .12s,background .12s;display:grid;position:absolute;top:12px;right:-29px}.sidebar-toggle:hover{color:var(--text);background:var(--accent-muted)}.sidebar-left{width:var(--sidebar-left-w);margin-right:12px}.sidebar-left.collapsed{width:var(--sidebar-collapsed)}.sidebar-left.collapsed .sidebar-toggle{border-radius:8px;left:50%;right:auto;transform:translate(-50%)}.sidebar-right{width:var(--sidebar-right-w);min-width:0;margin-left:12px;transition:width .28s cubic-bezier(.4,0,.2,1),margin-left .28s cubic-bezier(.4,0,.2,1),border-color .2s;overflow:hidden}.sidebar-right.is-closed{pointer-events:none;border-color:#0000;width:0;margin-left:0}.sidebar-right .sidebar-inner{min-width:var(--sidebar-right-w);opacity:1;flex-direction:column;transition:opacity .18s 40ms;display:flex;overflow:hidden}.sidebar-right.is-closed .sidebar-inner{opacity:0;pointer-events:none;transition:opacity .12s}.sidebar-head{align-items:center;gap:8px;margin-bottom:12px;display:flex}.sidebar-head h2{letter-spacing:1px;text-transform:uppercase;color:var(--muted);margin:0;font-size:13px;font-weight:600}.sidebar-head-row{justify-content:space-between;gap:8px}.sidebar-head-group{align-items:center;gap:8px;min-width:0;display:flex}.sidebar-inline-toggle{border:1px solid var(--border);background:var(--panel-2);width:28px;height:28px;color:var(--muted);cursor:pointer;border-radius:8px;flex-shrink:0;place-items:center;margin-top:-2px;font-size:14px;line-height:1;transition:color .12s,background .12s,border-color .12s;display:grid}.sidebar-inline-toggle:hover{color:var(--text);background:var(--accent-muted);border-color:var(--accent-border)}.sidebar-count{color:var(--muted);background:var(--accent-subtle);border:1px solid var(--border);border-radius:999px;padding:2px 8px;font-size:11px}.sidebar-multi-count{color:var(--muted);background:var(--accent-subtle);border:1px solid var(--border);white-space:nowrap;border-radius:999px;padding:2px 8px;font-size:11px}.sidebar-empty{color:var(--muted);margin:0;font-size:13px;line-height:1.5}.class-list{flex-direction:column;gap:4px;margin:0;padding:0;list-style:none;display:flex}.class-list-toolbar{grid-template-columns:minmax(0,1fr) 26px;align-items:center;gap:4px;margin-bottom:10px;display:grid}.class-list-search{border:1px solid var(--border);background:var(--input-bg);width:100%;min-width:0;color:var(--text);border-radius:6px;outline:none;padding:5px 7px;font-size:12px}.class-list-search:focus{border-color:var(--accent)}.class-list-search::-webkit-search-cancel-button{cursor:pointer}.class-list-sort{min-width:26px;height:26px;color:var(--accent);padding:0;font-size:14px;font-weight:600;line-height:1}.class-list-entry{align-items:stretch;gap:2px;min-width:0;display:flex}.class-list-entry-hidden .class-list-label{opacity:.55}.class-list-entry-hidden .class-dot{opacity:.45;box-shadow:none}.class-list-entry-expired .class-dot{box-shadow:none;background:#8a93a8}.class-list-entry-expired .class-list-label{color:var(--muted)}.class-list-entry-expired:not(.class-list-entry-hidden) .class-list-item:hover{background:var(--sidebar-hover-bg)}.property-checkbox-label{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:8px;display:inline-flex}.property-checkbox-label input{width:14px;height:14px;accent-color:var(--accent);margin:0}.property-hint{color:var(--muted);margin:4px 0 0;font-size:11px;line-height:1.35}.class-color-picker{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.class-color-swatch{cursor:pointer;border:2px solid #0000;border-radius:999px;width:24px;height:24px;padding:0;transition:transform .12s,border-color .12s,box-shadow .12s}.class-color-swatch:hover{transform:scale(1.06)}.class-color-swatch.active{border-color:var(--text);box-shadow:0 0 0 2px var(--sidebar-bg), 0 0 0 4px var(--accent-border)}.class-color-custom{border:1px solid var(--border);cursor:pointer;border-radius:999px;width:24px;height:24px;position:relative;overflow:hidden}.class-color-custom-input{cursor:pointer;background:0 0;border:none;width:calc(100% + 12px);height:calc(100% + 12px);padding:0;position:absolute;inset:-6px}g.node.expired .entity-core{fill:#8a93a8;stroke:#ffffff59}g.node.expired .entity-ring{stroke:#9aa3b5;stroke-opacity:.75}g.node.expired .node-label{fill:#b0b8c8;stroke:#00000073}g.node.expired .selection-halo{opacity:.35}g.node.expired.selected .entity-core,g.node.expired.selected .entity-ring{filter:none}g.node.expired.selected .node-label{font-weight:700}[data-theme=light] g.node.expired .entity-core{fill:#a8b0bd;stroke:#ffffffbf}[data-theme=light] g.node.expired .node-label{fill:#6b7280;stroke:#ffffffd9}.class-list-item{min-width:0;color:var(--text);cursor:pointer;text-align:left;background:0 0;border:1px solid #0000;border-radius:10px;outline:none;flex:1;align-items:center;gap:10px;padding:8px 10px;transition:background .12s,border-color .12s;display:flex}.class-list-item:focus-visible{box-shadow:inset 0 0 0 2px var(--accent)}.class-visibility-btn{width:34px;color:var(--muted);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:10px;flex-shrink:0;justify-content:center;align-items:center;transition:color .12s,background .12s,border-color .12s;display:inline-flex}.class-visibility-btn:hover{color:var(--text);background:var(--accent-subtle-hover);border-color:var(--accent-border-soft)}.class-visibility-btn.is-hidden{color:var(--accent)}.class-list-item:hover{background:var(--sidebar-hover-bg);border-color:#0000}.class-list-item.active{background:var(--sidebar-active-bg);border-color:var(--sidebar-active-border);color:var(--sidebar-active-text)}.class-dot{background:var(--canvas-accent);width:10px;height:10px;box-shadow:0 0 8px var(--canvas-accent-glow);border-radius:50%;flex-shrink:0}.class-list-label{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:13px;overflow:hidden}.sidebar-right .sidebar-content{flex-direction:column;flex:1;gap:14px;min-height:0;display:flex;overflow:auto}.sidebar-right .sidebar-actions{flex-shrink:0;margin-top:auto;margin-bottom:0;padding-top:14px}.sidebar-empty-state{text-align:center;flex:1;justify-content:center;align-items:center;min-height:0;padding:24px;display:flex}.sidebar-empty-state p{max-width:16em;color:var(--muted);margin:0;font-size:13px;line-height:1.5}.sidebar-actions{margin-bottom:16px}.property-group{flex-direction:column;gap:6px;display:flex}.property-group-compact{gap:4px}.property-label{letter-spacing:.8px;text-transform:uppercase;color:var(--muted);font-size:11px}.property-input{border:1px solid var(--border);background:var(--input-bg);width:100%;color:var(--text);border-radius:8px;outline:none;padding:8px 10px;transition:border-color .12s}.property-input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-focus)}[data-theme=light] .property-input:focus{box-shadow:0 0 0 3px var(--accent-focus)}[data-theme=light] .canvas-hint{box-shadow:0 8px 24px #0000000f}[data-theme=light] .sidebar{box-shadow:0 1px #0000000a}[data-theme=light] .btn{background:#fff}[data-theme=light] .btn:hover{background:var(--panel-2);border-color:var(--border)}[data-theme=light] .btn-ghost{background:#ffffffd9}[data-theme=light] .btn-danger{color:#b91c1c;background:#dc262614;border-color:#dc262640}[data-theme=light] .btn-danger:hover{background:#dc26261f}[data-theme=light] g.node.selected .entity-core{stroke:#ffffffa6}[data-theme=light] g.node.editing-label .node-label{stroke-width:4px}.canvas-wrap{border:1px solid var(--border);background:var(--canvas-bg);border-radius:14px;min-width:0;height:100%;min-height:0;position:relative;overflow:hidden}.canvas-graph-stage{opacity:1;transition:opacity .28s;position:absolute;inset:0}.canvas-wrap-settling .canvas-graph-stage{opacity:0;pointer-events:none}.canvas-load-overlay{z-index:4;background:var(--canvas-bg);pointer-events:none;place-items:center;display:grid;position:absolute;inset:0}.canvas-load-overlay-text{color:var(--muted);letter-spacing:.01em;font-size:13px;font-weight:500}.canvas-toolbar{z-index:3;pointer-events:none;justify-content:flex-end;align-items:center;display:flex;position:absolute;top:10px;left:10px;right:10px}.canvas-toolbar>*{pointer-events:auto}.canvas-hint{max-width:min(720px,100vw - 48px);font:inherit;text-align:left;color:var(--muted);background:var(--toolbar-bg);border:1px solid var(--border);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);cursor:pointer;border-radius:999px;align-items:center;gap:8px;padding:6px 10px 6px 12px;font-size:11px;line-height:1.35;transition:background .15s,border-color .15s,border-radius .15s;display:inline-flex}.canvas-hint:hover{border-color:var(--text-muted,var(--border));background:var(--panel-2,var(--toolbar-bg))}.canvas-hint-expanded{border-radius:12px;align-items:flex-start}.canvas-hint-title{color:var(--text);white-space:nowrap;font-weight:600}.canvas-hint-body{flex:1;min-width:0}.canvas-hint-chevron{color:var(--muted);opacity:.85;flex-shrink:0;margin-top:1px;font-size:10px;line-height:1}.canvas-hint strong{color:var(--text);font-weight:600}.class-drag-tool,.canvas-drag-palette-wrap{z-index:4;pointer-events:none;position:absolute;bottom:14px;left:50%;overflow:visible;transform:translate(-50%)}.canvas-drag-palette{border:1px solid var(--border);background:var(--toolbar-bg);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);border-radius:12px;align-items:stretch;gap:0;padding:0;display:flex}.class-drag-tool-handle,.canvas-drag-tool-handle{pointer-events:auto;cursor:grab;background:0 0;border:none;border-radius:0;justify-content:center;align-items:center;width:52px;height:52px;padding:0;transition:background-color .12s,opacity .12s;display:flex;position:relative}.canvas-drag-palette .canvas-drag-tool-handle:first-child{border-radius:11px 0 0 11px}.canvas-drag-palette .canvas-drag-tool-handle:last-child{border-radius:0 11px 11px 0}.class-drag-tool-handle:hover,.canvas-drag-tool-handle:hover{background:var(--sidebar-hover-bg)}.class-drag-tool-handle.dragging,.canvas-drag-tool-handle.dragging{cursor:grabbing;opacity:.55}.canvas-drag-tool-tooltip{border:1px solid var(--border);background:var(--toolbar-bg);color:var(--text);white-space:nowrap;pointer-events:none;opacity:0;z-index:20;border-radius:6px;padding:4px 10px;font-size:11px;font-weight:500;line-height:1.2;transition:opacity .12s;display:block;position:absolute;bottom:calc(100% + 10px);left:50%;transform:translate(-50%);box-shadow:0 4px 12px #0000001f}.canvas-drag-tool-handle:hover .canvas-drag-tool-tooltip{opacity:1}.canvas-drag-tool-handle.dragging .canvas-drag-tool-tooltip{opacity:0}.class-drag-node-preview{width:32px;height:32px;position:relative}.class-drag-node-ring,.class-drag-node-core{border-radius:50%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.class-drag-node-ring{opacity:.65;border:2px solid #5b8cff;width:26px;height:26px}.class-drag-node-core{border:1px solid var(--entity-core-stroke);background:#5b8cff;width:18px;height:18px}.class-drag-ghost{z-index:1000;pointer-events:none;opacity:.9;position:fixed;transform:translate(-50%,-50%)}.class-drag-ghost.over-canvas{opacity:1}.class-drag-node-preview-ghost .class-drag-node-ring{width:30px;height:30px}.class-drag-node-preview-ghost .class-drag-node-core{width:21px;height:21px}.expression-drag-node-preview{width:32px;height:32px;position:relative}.expression-drag-node-ring,.expression-drag-node-core{border-radius:3px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)rotate(45deg)}.expression-drag-node-ring{opacity:.65;border:2px solid #5b8cff;width:21px;height:21px}.expression-drag-node-core{border:1px solid var(--entity-core-stroke);background:#5b8cff;width:15px;height:15px}.expression-drag-node-preview-ghost .expression-drag-node-ring{width:24px;height:24px}.expression-drag-node-preview-ghost .expression-drag-node-core{width:17px;height:17px}.expression-shape-group{pointer-events:none}g.expression-node .entity-core.expression-core{pointer-events:all;cursor:pointer}g.expression-node.selected .selection-halo{opacity:1}g.expression-node.selected .entity-ring.expression-ring{stroke:var(--canvas-accent-2);stroke-width:3.5px;stroke-opacity:1;filter:drop-shadow(0 0 8px var(--canvas-accent-glow-strong)) drop-shadow(0 0 18px var(--canvas-accent-glow))}g.expression-node.selected .entity-core.expression-core{filter:brightness(1.18)saturate(1.1);stroke-width:2px;stroke:#ffffff59}g.expression-node.selected .node-label{fill:var(--canvas-accent-2);stroke-width:4px;font-weight:700}[data-theme=light] g.expression-node.selected .selection-halo{fill:var(--canvas-accent-subtle);stroke:var(--canvas-accent-glow)}[data-theme=light] g.expression-node.selected .entity-ring.expression-ring{stroke:var(--canvas-accent);filter:drop-shadow(0 0 8px var(--canvas-accent-glow)) drop-shadow(0 0 16px var(--canvas-accent-subtle))}[data-theme=light] g.expression-node.selected .entity-core.expression-core{stroke:#ffffffa6}[data-theme=light] g.expression-node.selected .node-label{fill:var(--canvas-accent);stroke:#fffffff2}.canvas-wrap-drop-target .graph-canvas{cursor:copy}.graph-canvas{cursor:default;width:100%;height:100%;display:block}.node-label{fill:var(--node-label-fill);pointer-events:none;text-anchor:middle;dominant-baseline:central;paint-order:stroke;stroke:var(--node-label-stroke);stroke-width:3px;stroke-linejoin:round;font-size:12px;font-weight:600}.node-tag{fill:var(--node-label-fill);pointer-events:none;text-anchor:middle;dominant-baseline:central;paint-order:stroke;stroke:var(--node-label-stroke);stroke-width:2.5px;stroke-linejoin:round;letter-spacing:.04em;text-transform:uppercase;font-size:10px;font-weight:600}g.node.expired .node-tag{fill:#b0b8c8;stroke:#00000073}[data-theme=light] g.node.expired .node-tag{fill:#6b7280;stroke:#ffffffd9}g.node.selected .node-tag{stroke-width:3px;font-weight:700}.entity-ring{fill:none;stroke-width:2px;stroke-opacity:.65;transition:stroke-opacity .15s,stroke-width .15s}.selection-halo{fill:var(--canvas-accent-subtle);stroke:var(--canvas-accent-2-glow);stroke-width:2px;opacity:0;pointer-events:none;transition:opacity .15s}.entity-core{stroke:var(--entity-core-stroke);stroke-width:1px;cursor:pointer;transition:filter .15s,stroke-width .15s}g.node.selected .selection-halo{opacity:1}g.node.selected .entity-ring{stroke-width:3.5px;stroke-opacity:1}g.node.selected .entity-core{filter:brightness(1.18)saturate(1.1);stroke-width:2px;stroke:#ffffff59}g.node.selected .node-label{stroke-width:4px;font-weight:700}g.node.selected.editing-label .selection-halo{opacity:1;animation:1.6s ease-in-out infinite edit-halo-pulse}g.node.editing-label .entity-ring{stroke-width:3px;animation:1.6s ease-in-out infinite edit-ring-pulse}g.node.editing-label .entity-core{filter:brightness(1.18)saturate(1.1)}g.node.editing-label .node-label{stroke-width:4px;font-weight:700}@keyframes edit-ring-pulse{0%,to{stroke-opacity:1}50%{stroke-opacity:.55}}@keyframes edit-halo-pulse{0%,to{opacity:1}50%{opacity:.72}}.minimap{z-index:4;border:1px solid var(--border);background:var(--minimap-bg);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-radius:10px;padding:6px 8px 8px;position:absolute;bottom:12px;right:12px;box-shadow:0 8px 24px #00000059}.minimap-label{letter-spacing:1px;text-transform:uppercase;color:var(--muted);margin-bottom:4px;font-size:9px}.minimap-svg{background:var(--minimap-canvas-bg);cursor:crosshair;border-radius:6px;display:block}.minimap-viewport{fill:var(--canvas-accent-subtle);stroke:var(--canvas-accent);stroke-width:1.5px;rx:2}.btn{border:1px solid var(--border);cursor:pointer;border-radius:8px;padding:8px 14px;font-size:13px;transition:background .12s,border-color .12s}.btn-ghost{color:var(--muted);background:0 0}.btn-ghost:hover{color:var(--text);background:var(--accent-subtle-hover)}.btn-xs{padding:2px 8px;font-size:16px;line-height:1}.btn-block{width:100%}.btn-danger{color:#fca5a5;background:#f871711f;border-color:#f8717159}.btn-danger:hover{background:#f8717138}.btn-danger:disabled{opacity:.5;cursor:not-allowed}.modal-note{color:var(--muted);margin:10px 0 0;font-size:12px}.modal-backdrop{background:var(--modal-backdrop);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:100;place-items:center;display:grid;position:fixed;inset:0}.modal{border:1px solid var(--border);background:linear-gradient(180deg, var(--panel) 0%, var(--panel-2) 100%);border-radius:14px;width:min(420px,100vw - 32px);box-shadow:0 20px 50px #00000080}[data-theme=light] .modal{box-shadow:0 30px 60px #0000001f}.modal-head{border-bottom:1px solid var(--border);padding:14px 16px}.modal-title{font-size:15px;font-weight:700}.modal-body{color:var(--muted);padding:16px;font-size:14px;line-height:1.5}.modal-body strong{color:var(--text)}.property-group-muted{gap:8px;margin-bottom:14px}.property-meta{align-items:baseline;gap:8px;font-size:12px;display:flex}.property-meta-label{color:var(--muted);text-transform:uppercase;letter-spacing:.6px;min-width:36px;font-size:10px}.property-meta-value{color:var(--text);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.property-endpoints{color:var(--text);align-items:center;gap:8px;font-size:12px;display:flex}.property-endpoint-name{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.property-endpoint-name:last-child{text-align:right}.property-endpoint-arrow{color:var(--muted);flex-shrink:0;font-size:14px;line-height:1}.property-endpoint-arrow-btn{border:1px solid var(--border);background:var(--input-bg);min-width:28px;color:var(--text);cursor:pointer;border-radius:6px;padding:3px 8px;font-weight:600;transition:color .12s,background .12s,border-color .12s,box-shadow .12s}.property-endpoint-arrow-btn:hover{color:var(--accent);border-color:var(--accent-border-strong);background:var(--accent-strong)}.property-endpoint-arrow-btn:active{background:var(--accent-active)}.property-endpoint-arrow-btn:focus-visible{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-focus);outline:none}[data-theme=light] .property-endpoint-arrow-btn:hover{border-color:var(--accent-border);background:var(--accent-subtle)}[data-theme=light] .property-endpoint-arrow-btn:active{background:var(--accent-active)}[data-theme=light] .property-endpoint-arrow-btn:focus-visible{box-shadow:0 0 0 3px var(--accent-focus)}.property-tabs-section{flex-direction:column;flex:1;gap:8px;min-height:0;display:flex}.property-tabs{flex-shrink:0;gap:4px;display:flex}.property-tab{border:1px solid var(--border);color:var(--muted);cursor:pointer;background:0 0;border-radius:8px;flex:1;padding:6px 8px;font-size:12px;transition:background .12s,color .12s,border-color .12s}.property-tab:hover{color:var(--text);background:var(--sidebar-hover-bg);border-color:var(--border)}.property-tab.active{color:var(--sidebar-active-text);background:var(--sidebar-active-bg);border-color:var(--sidebar-active-border)}.property-tab-panel{flex-direction:column;flex:1;gap:8px;min-height:0;display:flex;overflow-y:auto}.property-tab-panel-empty{min-height:48px}.data-prop-list{flex-direction:column;gap:4px;display:flex}.data-prop-row{grid-template-columns:1fr 68px 26px;align-items:center;gap:4px;display:grid}.data-prop-input{border:1px solid var(--border);background:var(--input-bg);width:100%;min-width:0;color:var(--text);border-radius:6px;outline:none;padding:5px 7px;font-size:12px}.data-prop-input:focus{border-color:var(--accent)}.data-prop-type{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px}.data-prop-remove{min-width:26px;height:26px;padding:0;line-height:1}.data-prop-add{flex-shrink:0;margin-bottom:4px}.object-prop-list{flex-direction:column;flex:1;gap:12px;min-height:0;display:flex;overflow-y:auto}.object-prop-item{flex-direction:column;gap:4px;display:flex}.object-prop-label-input{border:1px solid var(--border);background:var(--input-bg);width:100%;min-width:0;color:var(--text);border-radius:6px;outline:none;padding:5px 7px;font-size:12px}.object-prop-label-input:focus{border-color:var(--accent)}.object-prop-label-input-editing{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-focus-soft)}.property-textarea{resize:vertical;min-height:72px;line-height:1.45}.named-class-metadata{flex-direction:column;gap:10px;display:flex}.expression-connections{margin-top:4px}.expression-connections-heading{margin-bottom:8px}.expression-metadata{flex-direction:column;gap:10px;display:flex}.expression-owl-construct{white-space:normal;word-break:break-word;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px}.object-prop-empty{color:var(--muted);margin:0;padding:8px 2px;font-size:12px}.object-prop-row{grid-template-columns:minmax(0,1fr) auto minmax(0,1fr) 26px;align-items:center;gap:4px;display:grid}.object-prop-row-full{grid-template-columns:minmax(0,1fr) auto minmax(0,1fr)}.object-prop-direction{justify-self:center}.object-prop-remove{min-width:26px;height:26px;padding:0;line-height:1}.object-prop-composer{flex-direction:column;flex-shrink:0;gap:6px;display:flex}.object-prop-composer-top{border:1px solid var(--accent-panel);background:var(--accent-subtle-hover);border-radius:10px;margin-bottom:8px;padding:10px}.object-prop-composer-top .object-prop-composer-label{color:var(--accent)}.object-prop-composer-top .object-prop-add:not(:disabled){color:var(--accent);border:1px solid var(--accent-border);background:var(--accent-strong)}.object-prop-composer-top .object-prop-add:not(:disabled):hover{background:var(--accent-active)}[data-theme=light] .object-prop-composer-top{border-color:var(--accent-border-soft);background:var(--accent-subtle-hover)}[data-theme=light] .object-prop-composer-top .object-prop-add:not(:disabled){border-color:var(--accent-border);background:var(--accent-subtle)}[data-theme=light] .object-prop-composer-top .object-prop-add:not(:disabled):hover{background:var(--accent-active)}.object-prop-existing{flex-direction:column;flex:1;gap:6px;min-height:0;display:flex;overflow:hidden}.object-prop-composer-label{letter-spacing:.4px;text-transform:uppercase;color:var(--muted);margin:0;font-size:11px;font-weight:600}.object-prop-existing-label{padding-top:2px}.object-prop-add-row{margin-top:0}.object-prop-select{border:1px solid var(--border);background:var(--input-bg);width:100%;min-width:0;color:var(--text);border-radius:6px;outline:none;padding:5px 7px;font-size:12px}.object-prop-select:focus{border-color:var(--accent)}.object-prop-select-fixed{opacity:.85;cursor:not-allowed}.object-prop-select-fixed:disabled{color:var(--text)}.object-prop-add{min-width:26px;height:26px;padding:0;line-height:1}.object-prop-add:disabled{opacity:.45;cursor:not-allowed}.edge-line-style-section{flex-direction:column;gap:6px;margin-top:4px;display:flex}.edge-line-style-toggle{justify-content:flex-start;gap:6px;display:flex}.edge-line-style-btn{border:1px solid var(--border);width:34px;height:24px;color:var(--muted);cursor:pointer;background:0 0;border-radius:5px;justify-content:center;align-items:center;padding:0;transition:background .12s,color .12s,border-color .12s;display:inline-flex}.edge-line-style-btn:hover{color:var(--text);border-color:var(--accent-border)}.edge-line-style-btn.active{color:var(--text);background:var(--accent-subtle);border-color:var(--accent-border)}.edge-line-style-symbol{letter-spacing:0;font-size:11px;font-weight:400;line-height:1;display:block;transform:scale(.92)}.edge-line-style-symbol-dashed{letter-spacing:.5px;font-size:10px}.link{stroke:#5b6eb2;stroke-opacity:.75;stroke-width:1.4px;fill:none;pointer-events:none}path.link-hit{fill:none;stroke:#0000;stroke-width:16px;pointer-events:stroke;cursor:pointer}g.link-g.selected path.link:not(.link-underlay):not(.link-hit){stroke:var(--canvas-accent-2);stroke-opacity:1;stroke-width:2px;filter:drop-shadow(0 0 6px var(--canvas-accent-2-glow-soft))}.link.link-dashed{stroke-dasharray:6 4}.arrow-path{fill:#8aa0e0}.bar-path{fill:none;stroke:#8aa0e0;stroke-width:3.5px;stroke-linecap:square}.diamond-path{fill:#8aa0e0;stroke:#5b6eb2;stroke-width:.5px}.link.link-underlay{stroke-width:3.6px;stroke-opacity:.42;pointer-events:none}g.link-g.link-equiv path.link{stroke-width:1.4px}.link-drag-preview{stroke:var(--canvas-accent);stroke-width:2px;stroke-opacity:.85;stroke-dasharray:6 4;pointer-events:none}.link-handle-zone{fill:#0000;stroke:none;pointer-events:all;cursor:crosshair}.link-handle{fill:var(--canvas-accent);stroke:#ffffffd9;stroke-width:1.5px;stroke-linejoin:round;opacity:0;cursor:crosshair;pointer-events:none;transition:opacity .15s}g.node:hover .link-handle,g.node.handle-hot .link-handle,g.node.linking-source .link-handle,g.expression-node:hover .link-handle,g.expression-node.handle-hot .link-handle,g.expression-node.linking-source .link-handle{opacity:1;pointer-events:all}g.node.link-target .entity-ring,g.expression-node.link-target .entity-ring.expression-ring{stroke:var(--canvas-accent-2);stroke-width:3px;stroke-opacity:1;filter:drop-shadow(0 0 8px var(--canvas-accent-2-glow-soft))}g.edge-label.draggable{cursor:grab}g.edge-label.draggable:active{cursor:grabbing}.edge-label-bg{fill:var(--panel-2);stroke:var(--canvas-accent-border);stroke-width:1px;rx:6;ry:6;cursor:pointer;transition:stroke .15s,fill .15s,filter .15s}.edge-label-text{fill:var(--node-label-fill);text-anchor:middle;dominant-baseline:central;pointer-events:none;paint-order:stroke;stroke:var(--node-label-stroke);stroke-width:2.5px;stroke-linejoin:round;font-size:11px;font-weight:600}g.edge-label:hover .edge-label-bg{stroke:var(--canvas-accent-border-strong);filter:brightness(1.08)}g.edge-label.selected .edge-label-bg{stroke:var(--canvas-accent-2);stroke-width:2px;fill:var(--panel-2);filter:drop-shadow(0 0 8px var(--canvas-accent-glow))}g.edge-label.selected .edge-label-text{fill:var(--canvas-accent-2);stroke-width:3px;font-weight:700}g.edge-label.selected.editing-label .edge-label-bg{stroke:var(--canvas-accent-2);fill:var(--panel-2);animation:1.6s ease-in-out infinite edge-label-edit-pulse}g.edge-label.editing-label .edge-label-text{fill:var(--canvas-accent-2);font-weight:700}@keyframes edge-label-edit-pulse{0%,to{filter:drop-shadow(0 0 8px var(--canvas-accent-glow));stroke-width:2px}50%{filter:drop-shadow(0 0 12px var(--canvas-accent-border-strong));stroke-width:2.5px}}[data-theme=light] .link{stroke:#6b7cb6}[data-theme=light] .arrow-path{fill:#6b7cb6}[data-theme=light] .edge-label-bg{fill:#f4f4f5;stroke:var(--canvas-accent-border)}[data-theme=light] g.edge-label.selected .edge-label-bg,[data-theme=light] g.edge-label.selected.editing-label .edge-label-bg{fill:#f4f4f5;stroke:var(--canvas-accent)}[data-theme=light] g.edge-label.selected .edge-label-text{fill:var(--canvas-accent);stroke:#fffffff2}[data-theme=light] .link-handle{stroke:#fffffff2}.modal-foot{border-top:1px solid var(--border);justify-content:flex-end;gap:8px;padding:12px 16px;display:flex}.data-prop-link{stroke:#8a7a45;stroke-opacity:.7;stroke-width:1.2px;fill:none;pointer-events:none}g.data-prop-node{cursor:grab}g.data-prop-node:active{cursor:grabbing}.data-prop-rect{fill:#d4b84a;stroke:#a68f2e;stroke-width:1.2px;cursor:grab}.data-prop-type-label{fill:#2a2410;text-anchor:middle;dominant-baseline:central;pointer-events:none;font-size:10px;font-weight:700}.data-prop-input-editing{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-focus)}.data-prop-row-editing{position:relative}.data-prop-edge-label-bg{fill:#faf6e8;stroke:#b89a3573;stroke-width:1px;rx:5;ry:5;cursor:pointer}g.data-prop-edge-label{cursor:pointer}g.data-prop-edge-label:hover .data-prop-edge-label-bg{stroke:#a68f2ebf;filter:brightness(1.03)}g.data-prop-edge-label.selected .data-prop-edge-label-bg{stroke:#a68f2ee6;stroke-width:1.5px;fill:#faf6e8}g.data-prop-edge-label.selected .data-prop-edge-label-text{fill:#2a2410;font-weight:600}g.data-prop-edge-label.editing-label .data-prop-edge-label-bg{stroke:#8a7220;stroke-width:2px;fill:#faf6e8;animation:1.6s ease-in-out infinite data-prop-label-edit-pulse}g.data-prop-edge-label.editing-label .data-prop-edge-label-text{fill:#2a2410;font-weight:700}@keyframes data-prop-label-edit-pulse{0%,to{filter:drop-shadow(0 0 4px #8a722059);stroke-width:2px}50%{filter:drop-shadow(0 0 7px #8a722080);stroke-width:2.5px}}g.data-prop-node.selected .data-prop-rect{stroke:#a68f2e;stroke-width:1.8px;filter:drop-shadow(0 0 4px #a68f2e59)}g.data-prop-node.editing-label .data-prop-rect{stroke:#8a7220;stroke-width:2px;filter:drop-shadow(0 0 6px #8a722073);animation:1.6s ease-in-out infinite edit-halo-pulse}g.data-prop-node.editing-label .data-prop-type-label{fill:#2a2410;font-weight:700}.data-prop-edge-label-text{fill:#2a2410;text-anchor:middle;dominant-baseline:central;pointer-events:none;font-size:10px;font-weight:600}[data-theme=light] .data-prop-link{stroke:#9a8540}[data-theme=light] .data-prop-rect{fill:#e8cc5a;stroke:#b89a35}[data-theme=light] g.data-prop-node.selected .data-prop-rect{stroke:#b89a35}[data-theme=light] g.data-prop-node.editing-label .data-prop-rect{stroke:#8a7220}
