.react-flow{direction:ltr;--xy-edge-stroke-default: #b1b1b7;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #555;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(255, 255, 255, .5);--xy-minimap-background-color-default: #fff;--xy-minimap-mask-background-color-default: rgba(240, 240, 240, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #e2e2e2;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: transparent;--xy-background-pattern-dots-color-default: #91919a;--xy-background-pattern-lines-color-default: #eee;--xy-background-pattern-cross-color-default: #e2e2e2;background-color:var(--xy-background-color, var(--xy-background-color-default));--xy-node-color-default: inherit;--xy-node-border-default: 1px solid #1a192b;--xy-node-background-color-default: #fff;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #1a192b;--xy-node-border-radius-default: 3px;--xy-handle-background-color-default: #1a192b;--xy-handle-border-color-default: #fff;--xy-selection-background-color-default: rgba(0, 89, 220, .08);--xy-selection-border-default: 1px dotted rgba(0, 89, 220, .8);--xy-controls-button-background-color-default: #fefefe;--xy-controls-button-background-color-hover-default: #f4f4f4;--xy-controls-button-color-default: inherit;--xy-controls-button-color-hover-default: inherit;--xy-controls-button-border-color-default: #eee;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #ffffff;--xy-edge-label-color-default: inherit;--xy-resize-background-color-default: #3367d9}.react-flow.dark{--xy-edge-stroke-default: #3e3e3e;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #727272;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(150, 150, 150, .25);--xy-minimap-background-color-default: #141414;--xy-minimap-mask-background-color-default: rgba(60, 60, 60, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #2b2b2b;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: #141414;--xy-background-pattern-dots-color-default: #777;--xy-background-pattern-lines-color-default: #777;--xy-background-pattern-cross-color-default: #777;--xy-node-color-default: #f8f8f8;--xy-node-border-default: 1px solid #3c3c3c;--xy-node-background-color-default: #1e1e1e;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #999;--xy-handle-background-color-default: #bebebe;--xy-handle-border-color-default: #1e1e1e;--xy-selection-background-color-default: rgba(200, 200, 220, .08);--xy-selection-border-default: 1px dotted rgba(200, 200, 220, .8);--xy-controls-button-background-color-default: #2b2b2b;--xy-controls-button-background-color-hover-default: #3e3e3e;--xy-controls-button-color-default: #f8f8f8;--xy-controls-button-color-hover-default: #fff;--xy-controls-button-border-color-default: #5b5b5b;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #141414;--xy-edge-label-color-default: #f8f8f8}.react-flow__background{background-color:var(--xy-background-color-props, var(--xy-background-color, var(--xy-background-color-default)));pointer-events:none;z-index:-1}.react-flow__container{position:absolute;width:100%;height:100%;top:0;left:0}.react-flow__pane{z-index:1}.react-flow__pane.draggable{cursor:grab}.react-flow__pane.dragging{cursor:grabbing}.react-flow__pane.selection{cursor:pointer}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow__edge-path{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default));stroke-width:var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));fill:none}.react-flow__connection-path{stroke:var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));stroke-width:var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));fill:none}.react-flow .react-flow__edges{position:absolute}.react-flow .react-flow__edges svg{overflow:visible;position:absolute;pointer-events:none}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.selectable{cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.selectable:focus .react-flow__edge-path,.react-flow__edge.selectable:focus-visible .react-flow__edge-path{stroke:var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default))}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__arrowhead polyline{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default))}.react-flow__arrowhead polyline.arrowclosed{fill:var(--xy-edge-stroke, var(--xy-edge-stroke-default))}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:dashdraw .5s linear infinite}svg.react-flow__connectionline{z-index:1001;overflow:visible;position:absolute}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-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}.react-flow__node.selectable{cursor:pointer}.react-flow__node.draggable{cursor:grab;pointer-events:all}.react-flow__node.draggable.dragging{cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.react-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:grab}.react-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px;width:6px;height:6px;background-color:var(--xy-handle-background-color, var(--xy-handle-background-color-default));border:1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));border-radius:100%}.react-flow__handle.connectingfrom{pointer-events:all}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;left:50%;bottom:0;transform:translate(-50%,50%)}.react-flow__handle-top{top:0;left:50%;transform:translate(-50%,-50%)}.react-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.react-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__pane.selection .react-flow__panel{pointer-events:none}.react-flow__panel{position:absolute;z-index:5;margin:15px}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.top.center,.react-flow__panel.bottom.center{left:50%;transform:translate(-15px) translate(-50%)}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.left.center,.react-flow__panel.right.center{top:50%;transform:translateY(-15px) translateY(-50%)}.react-flow__attribution{font-size:10px;background:var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));padding:2px 3px;margin:0}.react-flow__attribution a{text-decoration:none;color:#999}@keyframes dashdraw{0%{stroke-dashoffset:10}}.react-flow__edgelabel-renderer{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;left:0;top:0}.react-flow__viewport-portal{position:absolute;width:100%;height:100%;left:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__minimap{background:var( --xy-minimap-background-color-props, var(--xy-minimap-background-color, var(--xy-minimap-background-color-default)) )}.react-flow__minimap-svg{display:block}.react-flow__minimap-mask{fill:var( --xy-minimap-mask-background-color-props, var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default)) );stroke:var( --xy-minimap-mask-stroke-color-props, var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default)) );stroke-width:var( --xy-minimap-mask-stroke-width-props, var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default)) )}.react-flow__minimap-node{fill:var( --xy-minimap-node-background-color-props, var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default)) );stroke:var( --xy-minimap-node-stroke-color-props, var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default)) );stroke-width:var( --xy-minimap-node-stroke-width-props, var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default)) )}.react-flow__background-pattern.dots{fill:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default)) )}.react-flow__background-pattern.lines{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default)) )}.react-flow__background-pattern.cross{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default)) )}.react-flow__controls{display:flex;flex-direction:column;box-shadow:var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default))}.react-flow__controls.horizontal{flex-direction:row}.react-flow__controls-button{display:flex;justify-content:center;align-items:center;height:26px;width:26px;padding:4px;border:none;background:var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));border-bottom:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) );color:var( --xy-controls-button-color-props, var(--xy-controls-button-color, var(--xy-controls-button-color-default)) );cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__controls-button svg{width:100%;max-width:12px;max-height:12px;fill:currentColor}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-input,.react-flow__node-default,.react-flow__node-output,.react-flow__node-group{padding:10px;border-radius:var(--xy-node-border-radius, var(--xy-node-border-radius-default));width:150px;font-size:12px;color:var(--xy-node-color, var(--xy-node-color-default));text-align:center;border:var(--xy-node-border, var(--xy-node-border-default));background-color:var(--xy-node-background-color, var(--xy-node-background-color-default))}.react-flow__node-input.selectable:hover,.react-flow__node-default.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default))}.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default))}.react-flow__node-group{background-color:var(--xy-node-group-background-color, var(--xy-node-group-background-color-default))}.react-flow__nodesselection-rect,.react-flow__selection{background:var(--xy-selection-background-color, var(--xy-selection-background-color-default));border:var(--xy-selection-border, var(--xy-selection-border-default))}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls-button:hover{background:var( --xy-controls-button-background-color-hover-props, var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default)) );color:var( --xy-controls-button-color-hover-props, var(--xy-controls-button-color-hover, var(--xy-controls-button-color-hover-default)) )}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__controls-button:last-child{border-bottom:none}.react-flow__controls.horizontal .react-flow__controls-button{border-bottom:none;border-right:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) )}.react-flow__controls.horizontal .react-flow__controls-button:last-child{border-right:none}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{width:5px;height:5px;border:1px solid #fff;border-radius:1px;background-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));translate:-50% -50%}.react-flow__resize-control.handle.left{left:0;top:50%}.react-flow__resize-control.handle.right{left:100%;top:50%}.react-flow__resize-control.handle.top{left:50%;top:0}.react-flow__resize-control.handle.bottom{left:50%;top:100%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));border-width:0;border-style:solid}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;transform:translate(-50%);top:0;height:100%}.react-flow__resize-control.line.left{left:0;border-left-width:1px}.react-flow__resize-control.line.right{left:100%;border-right-width:1px}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{height:1px;transform:translateY(-50%);left:0;width:100%}.react-flow__resize-control.line.top{top:0;border-top-width:1px}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}.react-flow__edge-textbg{fill:var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default))}.react-flow__edge-text{fill:var(--xy-edge-label-color, var(--xy-edge-label-color-default))}.diagram-toolbar{background:var(--editor-surface);border-bottom:1px solid var(--editor-border);padding:8px 16px;display:flex;align-items:center;justify-content:space-between;gap:16px;box-shadow:0 1px 3px #0000000d;z-index:10}.toolbar-left{display:flex;align-items:center;gap:8px}.diagram-title{font-size:16px;font-weight:600;color:var(--editor-text)}.diagram-type{font-size:12px;color:var(--editor-text-muted)}.toolbar-center{display:flex;align-items:center;gap:8px}.tool-group{display:flex;align-items:center;gap:4px}.tool-btn{padding:6px 12px;background:var(--editor-bg);border:1px solid var(--editor-border);border-radius:6px;cursor:pointer;font-size:14px;color:var(--editor-text-control);transition:all .2s;min-width:36px}.tool-btn:hover:not(:disabled){background:var(--editor-hover-strong);border-color:var(--editor-border-strong)}.tool-btn:disabled{opacity:.4;cursor:not-allowed}.tool-btn.active{background:var(--editor-accent);color:#fff;border-color:var(--editor-accent)}.toolbar-divider{width:1px;height:24px;background:var(--editor-border)}.toolbar-right{display:flex;align-items:center;gap:8px}.export-group{display:flex;gap:6px}.export-btn{padding:6px 12px;background:var(--editor-accent);color:#fff;border:none;border-radius:6px;cursor:pointer;font-size:13px;font-weight:500;transition:all .2s}.export-btn:hover{background:var(--editor-accent-hover)}.properties-panel{width:300px;background:var(--editor-surface);border-left:1px solid var(--editor-border);display:flex;flex-direction:column;overflow:hidden;box-shadow:-2px 0 8px #0000000d}.properties-header{padding:16px;border-bottom:1px solid var(--editor-border);display:flex;justify-content:space-between;align-items:center}.properties-header h3{font-size:16px;font-weight:600;color:var(--editor-text);margin:0}.close-btn{background:none;border:none;font-size:24px;cursor:pointer;color:var(--editor-text-muted);padding:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center;border-radius:4px}.close-btn:hover{background:var(--editor-hover);color:var(--editor-text)}.properties-tabs{display:flex;border-bottom:1px solid var(--editor-border)}.properties-tabs button{flex:1;padding:12px;background:none;border:none;border-bottom:2px solid transparent;cursor:pointer;font-size:14px;color:var(--editor-text-muted);transition:all .2s}.properties-tabs button:hover{color:var(--editor-text);background:var(--editor-bg)}.properties-tabs button.active{color:var(--editor-accent);border-bottom-color:var(--editor-accent)}.properties-empty{padding:32px 16px;text-align:center;color:var(--editor-text-subtle);font-size:14px}.properties-content{flex:1;overflow-y:auto;padding:16px}.property-group{margin-bottom:16px}.property-group label{display:block;font-size:13px;font-weight:500;color:var(--editor-text-control);margin-bottom:6px}.property-group input[type=text],.property-group textarea{width:100%;padding:8px 10px;border:1px solid var(--editor-border);border-radius:6px;font-size:14px;font-family:inherit;transition:border-color .2s}.property-group input[type=text]:focus,.property-group textarea:focus{outline:none;border-color:var(--editor-accent)}.property-group textarea{resize:vertical;min-height:60px}.color-input{display:flex;gap:8px}.color-input input[type=color]{width:48px;height:36px;border:1px solid var(--editor-border);border-radius:6px;cursor:pointer}.color-input input[type=text]{flex:1}.property-value{padding:8px 10px;background:var(--editor-bg);border:1px solid var(--editor-border);border-radius:6px;font-size:13px;color:var(--editor-text-muted)}.property-group input[type=checkbox]{margin-right:8px}.property-group input[type=range]{width:100%;margin-right:8px}.node-palette{width:250px;background:var(--editor-surface);border-right:1px solid var(--editor-border);display:flex;flex-direction:column;overflow:hidden;box-shadow:2px 0 8px #0000000d}.palette-header{padding:16px;border-bottom:1px solid var(--editor-border);display:flex;justify-content:space-between;align-items:center}.palette-header h3{font-size:16px;font-weight:600;color:var(--editor-text);margin:0}.palette-search{padding:12px 16px;border-bottom:1px solid var(--editor-border)}.palette-search input{width:100%;padding:8px 12px;border:1px solid var(--editor-border);border-radius:6px;font-size:14px}.palette-search input:focus{outline:none;border-color:var(--editor-accent)}.palette-nodes{flex:1;overflow-y:auto;padding:8px}.palette-node{width:100%;padding:10px 12px;background:var(--editor-bg);border:1px solid var(--editor-border);border-radius:6px;cursor:pointer;display:flex;align-items:center;gap:10px;margin-bottom:8px;transition:all .2s}.palette-node:hover{background:var(--editor-hover-strong);border-color:var(--editor-border-strong);transform:translate(4px)}.node-icon{font-size:20px;width:28px;text-align:center}.node-label{font-size:14px;color:var(--editor-text);font-weight:500}.palette-footer{padding:12px 16px;border-top:1px solid var(--editor-border);text-align:center}.diagram-type-badge{padding:4px 12px;background:#e0f2fe;color:#0369a1;border-radius:12px;font-size:12px;font-weight:500}.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:9999;animation:fadeIn .2s ease-out}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.modal-content{background:var(--editor-surface);border-radius:8px;box-shadow:0 8px 32px #0003;max-width:600px;width:90%;max-height:90vh;overflow:auto;animation:slideUp .2s ease-out}@keyframes slideUp{0%{transform:translateY(20px);opacity:0}to{transform:translateY(0);opacity:1}}.modal-header{padding:20px 24px;border-bottom:1px solid var(--editor-border);display:flex;align-items:center;justify-content:space-between}.modal-header h2{margin:0;font-size:20px;font-weight:600;color:var(--editor-text)}.modal-close{background:none;border:none;font-size:28px;color:var(--editor-text-muted);cursor:pointer;padding:0;width:32px;height:32px;display:flex;align-items:center;justify-content:center;border-radius:4px;transition:all .2s}.modal-close:hover{background:var(--editor-hover);color:var(--editor-text)}.modal-body{padding:24px}.modal-footer{padding:16px 24px;border-top:1px solid var(--editor-border);display:flex;justify-content:flex-end;gap:12px}.form-group{margin-bottom:20px}.form-group label{display:block;font-size:14px;font-weight:500;color:var(--editor-text-control);margin-bottom:8px}.form-group input[type=text],.form-group textarea{width:100%;padding:10px 12px;border:1px solid var(--editor-border);border-radius:6px;font-size:14px;font-family:inherit;transition:border-color .2s,box-shadow .2s;box-sizing:border-box}.form-group input[type=text]:focus,.form-group textarea:focus{outline:none;border-color:var(--editor-accent);box-shadow:0 0 0 3px #3b82f61a}.form-group input[type=text][aria-invalid=true],.form-group textarea[aria-invalid=true]{border-color:#ef4444}.form-group input[type=text][aria-invalid=true]:focus,.form-group textarea[aria-invalid=true]:focus{box-shadow:0 0 0 3px #ef44441a}.form-error{margin-top:6px;font-size:13px;color:#ef4444;font-weight:500}.form-hint{margin-top:6px;font-size:12px;color:var(--editor-text-subtle)}.required-asterisk{color:#ef4444;margin-left:2px}.diagram-type-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;margin-top:8px}.diagram-type-card{position:relative;display:flex;flex-direction:column;align-items:center;padding:16px;border:2px solid var(--editor-border);border-radius:8px;cursor:pointer;transition:all .2s;background:var(--editor-bg);outline:none}.diagram-type-card:hover:not(.disabled){border-color:var(--editor-border-strong);background:var(--editor-hover);transform:translateY(-2px);box-shadow:0 4px 8px #0000001a}.diagram-type-card:focus-visible{border-color:var(--editor-accent);box-shadow:0 0 0 3px #3b82f633}.diagram-type-card.selected{border-color:var(--editor-accent);background:var(--editor-accent-soft);box-shadow:0 2px 8px #3b82f633}.diagram-type-card.disabled{cursor:not-allowed;opacity:.5;background:var(--editor-bg)}.diagram-type-card.disabled:hover{transform:none;box-shadow:none}.diagram-type-card input[type=radio]{position:absolute;opacity:0;pointer-events:none}.diagram-type-icon{font-size:32px;margin-bottom:8px;filter:grayscale(0);transition:filter .2s}.diagram-type-card.disabled .diagram-type-icon{filter:grayscale(1)}.diagram-type-label{font-size:14px;font-weight:600;color:var(--editor-text);margin-bottom:4px;text-align:center}.diagram-type-description{font-size:12px;color:var(--editor-text-muted);text-align:center;line-height:1.4}.coming-soon-badge{position:absolute;top:8px;right:8px;padding:2px 8px;background:#fbbf24;color:#78350f;border-radius:4px;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.5px}.btn-primary,.btn-secondary{padding:10px 20px;border-radius:6px;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s;border:none;outline:none}.btn-primary{background:var(--editor-accent);color:#fff}.btn-primary:hover:not(:disabled){background:var(--editor-accent-hover);transform:translateY(-1px);box-shadow:0 2px 8px #0c8a5047}.btn-primary:active:not(:disabled){transform:translateY(0)}.btn-primary:focus-visible{box-shadow:0 0 0 3px #0c8a5059}.btn-primary:disabled{opacity:.5;cursor:not-allowed}.btn-secondary{background:var(--editor-hover);color:var(--editor-text-control);border:1px solid var(--editor-border)}.btn-secondary:hover:not(:disabled){background:var(--editor-hover-strong);border-color:var(--editor-border-strong)}.btn-secondary:focus-visible{box-shadow:0 0 0 3px #94a3b833}.group-container-node{position:relative}.group-container-node:hover .react-flow__handle{opacity:1!important}.gv2-container-desc-empty{opacity:0;font-style:italic;transition:opacity .15s ease}.group-container-node:hover .gv2-container-desc-empty,.react-flow__node:hover .gv2-container-desc-empty{opacity:.4}.container-header{transition:background-color .2s ease}.container-body{transition:all .2s ease}.icon-library-node:hover .react-flow__handle{opacity:1!important}.react-flow__node[data-group-depth="0"]{outline:3px dotted #f59e0b;outline-offset:4px}.react-flow__node[data-group-depth="1"]{outline:2px dotted #3b82f6;outline-offset:4px}.react-flow__node[data-group-depth="2"],.react-flow__node[data-group-depth="3"],.react-flow__node[data-group-depth="4"],.react-flow__node[data-group-depth="5"],.react-flow__node[data-group-depth="6"],.react-flow__node[data-group-depth="7"],.react-flow__node[data-group-depth="8"],.react-flow__node[data-group-depth="9"]{outline:2px dotted #10b981;outline-offset:4px}.react-flow__handle{width:8px;height:8px;background-color:#2563eb;border:2px solid white;border-radius:50%;transition:opacity .2s ease,transform .2s ease}.react-flow__handle:hover{transform:scale(1.3)}@keyframes pulse{0%{box-shadow:0 0 #0c8a5059}50%{box-shadow:0 0 0 8px #3b82f600}to{box-shadow:0 0 #3b82f600}}@keyframes containerResize{0%{transform:scale(1)}50%{transform:scale(1.02)}to{transform:scale(1)}}.container-modal-overlay{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.container-modal{animation:slideUpModal .3s cubic-bezier(.16,1,.3,1)}@keyframes slideUpModal{0%{transform:translateY(20px);opacity:0}to{transform:translateY(0);opacity:1}}.container-template-card{transition:all .2s cubic-bezier(.16,1,.3,1)}.container-template-card:hover{transform:translateY(-4px)}.container-template-card:active{transform:translateY(-2px)}.react-flow__node-container .react-flow__handle{opacity:0;transition:opacity .2s ease}.react-flow__node-container:hover .react-flow__handle,.react-flow__node-container.selected .react-flow__handle{opacity:1}.react-flow__node-container .react-flow__handle{width:6px;height:6px;background-color:#3b82f6;border:2px solid white}@media (max-width: 1024px){.properties-panel,.node-palette{position:absolute;z-index:100;height:100%;box-shadow:0 4px 16px #00000026}.node-palette{left:0}.properties-panel{right:0}.diagram-toolbar{padding:6px 12px}.diagram-title{font-size:14px}.tool-btn{min-width:32px;padding:6px 10px;font-size:13px}}@media (max-width: 768px){.properties-panel,.node-palette-footer{display:none!important}.diagram-toolbar{flex-wrap:wrap;gap:6px;padding:8px 12px}.toolbar-center,.toolbar-right{display:none}.react-flow__minimap{display:none!important}.react-flow__controls{bottom:80px!important}.modal-content{width:100%;max-width:100%;height:100vh;max-height:100vh;border-radius:0;animation:slideUpFull .3s ease-out}@keyframes slideUpFull{0%{transform:translateY(100%)}to{transform:translateY(0)}}.modal-header,.modal-body,.modal-footer{padding:16px}.diagram-type-grid{grid-template-columns:1fr}.diagram-type-card{padding:12px}.diagram-type-icon{font-size:28px}}@media (max-width: 600px){.diagram-toolbar{padding:4px 8px}.toolbar-left{flex:1;min-width:0}.diagram-title{font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.diagram-type{display:none}.tool-btn{min-width:28px;padding:4px 8px;font-size:12px}.export-btn{font-size:11px;padding:4px 8px}}@media (max-height: 500px) and (orientation: landscape){.modal-content{max-height:95vh;overflow-y:auto}.modal-header{padding:12px 16px}.modal-body{padding:16px}.diagram-type-card{padding:10px}}.context-menu{background:var(--editor-surface);border:1px solid var(--editor-border);border-radius:8px;box-shadow:0 4px 12px #00000026,0 0 1px #0000001a;padding:4px;min-width:200px;animation:contextMenuSlide .15s ease-out}@keyframes contextMenuSlide{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.context-menu-item{display:flex;align-items:center;gap:10px;width:100%;padding:8px 12px;background:none;border:none;border-radius:4px;cursor:pointer;text-align:left;font-size:14px;color:var(--editor-text);transition:background-color .15s}.context-menu-item:hover:not(.disabled){background:var(--editor-hover)}.context-menu-item.disabled{opacity:.5;cursor:not-allowed}.context-menu-item.destructive{color:#ef4444}.context-menu-item.destructive:hover:not(.disabled){background:#fee2e2}.context-menu-icon{font-size:16px;width:20px;text-align:center;flex-shrink:0}.context-menu-label{flex:1;white-space:nowrap}.context-menu-divider{height:1px;background:var(--editor-border);margin:4px 0}.locked-indicator{position:absolute;top:4px;right:4px;width:20px;height:20px;background:#ef4444e6;color:#fff;border-radius:4px;display:flex;align-items:center;justify-content:center;font-size:12px;pointer-events:none;z-index:10}.react-flow__node.locked{opacity:.85;cursor:not-allowed!important}.react-flow__node.locked:after{content:"";position:absolute;top:0;left:0;right:0;bottom:0;border:2px dashed rgba(239,68,68,.4);border-radius:8px;pointer-events:none}.shape-node:hover .shape-handle,.react-flow__node.selected .shape-handle{opacity:1!important}.shape-node svg{width:100%;height:100%;display:block}@keyframes edgeFlow{0%{stroke-dashoffset:24}to{stroke-dashoffset:0}}.react-flow__edge-path.edge-animated{animation:edgeFlow 1s linear infinite}.react-flow__edge-path.edge-animated.edge-style-solid{stroke-dasharray:8 4;animation:edgeFlow .8s linear infinite}.react-flow__edge-path.edge-animated.edge-style-dashed{animation:edgeFlow .6s linear infinite}.react-flow__edge-path.edge-animated.edge-style-dotted{animation:edgeFlow .4s linear infinite}.react-flow__edge-path.edge-animated.edge-style-longdash{animation:edgeFlow 1.2s linear infinite}@media print{.diagram-toolbar,.node-palette,.properties-panel,.modal-overlay,.context-menu{display:none!important}}[data-theme=dark] .diagram-toolbar{background:var(--toolbar-bg);border-bottom-color:var(--toolbar-border)}[data-theme=dark] .diagram-title,[data-theme=dark] .properties-header h3,[data-theme=dark] .palette-header h3,[data-theme=dark] .modal-header h2,[data-theme=dark] .node-label,[data-theme=dark] .diagram-type-label,[data-theme=dark] .context-menu-item{color:var(--color-gray-900)}[data-theme=dark] .diagram-type,[data-theme=dark] .close-btn,[data-theme=dark] .properties-tabs button,[data-theme=dark] .properties-empty,[data-theme=dark] .property-group label,[data-theme=dark] .property-value,[data-theme=dark] .modal-close,[data-theme=dark] .form-group label,[data-theme=dark] .form-hint,[data-theme=dark] .diagram-type-description{color:var(--color-gray-500)}[data-theme=dark] .tool-btn{background:var(--control-bg);border-color:var(--control-border);color:var(--control-fg)}[data-theme=dark] .tool-btn:hover:not(:disabled){background:var(--control-bg-hover);border-color:var(--control-border-hover)}[data-theme=dark] .toolbar-divider{background:var(--toolbar-border)}[data-theme=dark] .properties-panel{background:var(--panel-bg);border-left-color:var(--panel-border)}[data-theme=dark] .properties-header,[data-theme=dark] .properties-tabs{border-bottom-color:var(--panel-border)}[data-theme=dark] .close-btn:hover,[data-theme=dark] .properties-tabs button:hover,[data-theme=dark] .modal-close:hover{background:var(--control-bg-hover);color:var(--color-gray-900)}[data-theme=dark] .property-group input[type=text],[data-theme=dark] .property-group textarea,[data-theme=dark] .palette-search input,[data-theme=dark] .form-group input[type=text],[data-theme=dark] .form-group textarea{background:var(--input-bg);border-color:var(--input-border);color:var(--color-gray-900)}[data-theme=dark] .property-value{background:var(--color-gray-50);border-color:var(--border-color-light)}[data-theme=dark] .node-palette{background:var(--panel-bg);border-right-color:var(--panel-border)}[data-theme=dark] .palette-header,[data-theme=dark] .palette-search,[data-theme=dark] .palette-footer{border-color:var(--panel-border)}[data-theme=dark] .palette-node{background:var(--control-bg);border-color:var(--control-border)}[data-theme=dark] .palette-node:hover{background:var(--control-bg-hover);border-color:var(--control-border-hover)}[data-theme=dark] .modal-content{background:var(--panel-bg)}[data-theme=dark] .modal-header,[data-theme=dark] .modal-footer{border-color:var(--panel-border)}[data-theme=dark] .diagram-type-card{background:var(--control-bg);border-color:var(--control-border)}[data-theme=dark] .diagram-type-card:hover:not(.disabled){background:var(--control-bg-hover);border-color:var(--control-border-hover)}[data-theme=dark] .btn-secondary{background:var(--control-bg);color:var(--control-fg);border-color:var(--control-border)}[data-theme=dark] .btn-secondary:hover:not(:disabled){background:var(--control-bg-hover);border-color:var(--control-border-hover)}[data-theme=dark] .context-menu{background:var(--panel-bg);border-color:var(--panel-border)}[data-theme=dark] .context-menu-item:hover:not(.disabled){background:var(--control-bg-hover)}[data-theme=dark] .context-menu-divider{background:var(--panel-border)}.zoom-indicator{position:absolute;bottom:16px;left:50%;transform:translate(-50%);z-index:5;display:inline-flex;align-items:center;gap:2px;padding:2px;background:var(--control-bg, #ffffff);border:1px solid var(--control-border, #e2e8f0);border-radius:8px;box-shadow:0 1px 4px #0000001f;font-size:12px;-webkit-user-select:none;user-select:none}.zoom-indicator-btn{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:none;border-radius:6px;background:none;color:var(--control-fg, #374151);cursor:pointer;transition:background .15s}.zoom-indicator-btn:hover{background:var(--control-bg-hover, #f1f5f9)}.zoom-indicator-value{min-width:44px;padding:0 8px 0 4px;text-align:center;font-variant-numeric:tabular-nums;color:var(--control-fg, #374151)}.diagram-editor-enhanced.presentation-mode .toolbar-v2,.diagram-editor-enhanced.presentation-mode .diagram-toolbar,.diagram-editor-enhanced.presentation-mode .node-palette,.diagram-editor-enhanced.presentation-mode .properties-panel-enhanced,.diagram-editor-enhanced.presentation-mode .canvas-tab-bar,.diagram-editor-enhanced.presentation-mode .zoom-indicator,.diagram-editor-enhanced.presentation-mode .mobile-toolbar{display:none!important}.diagram-editor-enhanced .presentation-exit-btn{position:absolute;top:12px;right:12px;z-index:10001;display:inline-flex;align-items:center;gap:6px}.diagram-canvas-region:focus{outline:none}.diagram-canvas-region:focus-visible{outline:var(--focus-ring-width, 2px) solid var(--focus-ring-color, #3b82f6);outline-offset:calc(-1 * var(--focus-ring-width, 2px))}.react-flow__node:focus-visible{outline:var(--focus-ring-width, 2px) solid var(--focus-ring-color, #3b82f6);outline-offset:var(--focus-ring-offset, 2px);border-radius:4px}.zoom-indicator-btn:focus-visible{outline:var(--focus-ring-width, 2px) solid var(--focus-ring-color, #3b82f6);outline-offset:1px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);padding:var(--space-2) var(--space-3);font-family:var(--font-family);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);line-height:var(--line-height-tight);border:var(--border-width-1) solid transparent;border-radius:var(--radius-md);cursor:pointer;transition:background var(--transition-fast),border-color var(--transition-fast),color var(--transition-fast),box-shadow var(--transition-fast),transform var(--transition-fast);white-space:nowrap;-webkit-user-select:none;user-select:none;outline:none}.btn:active:not(:disabled){transform:translateY(.5px)}.btn:disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.btn:focus-visible{box-shadow:var(--ring-primary);border-color:var(--color-primary-400)}.btn-sm{height:var(--button-height-sm);padding:var(--space-1) var(--space-2);font-size:var(--font-size-xs)}.btn-md{height:var(--button-height-md);padding:var(--space-2) var(--space-3);font-size:var(--font-size-sm)}.btn-lg{height:var(--button-height-lg);padding:var(--space-3) var(--space-4);font-size:var(--font-size-base)}.btn-primary{background:linear-gradient(180deg,var(--color-primary-500),var(--color-primary-600));color:var(--color-white);border-color:var(--color-primary-600);box-shadow:var(--shadow-button-primary)}.btn-primary:hover:not(:disabled){background:linear-gradient(180deg,var(--color-primary-600),var(--color-primary-700));border-color:var(--color-primary-700);box-shadow:var(--shadow-button-primary),var(--shadow-button-hover)}.btn-primary:active:not(:disabled){background:var(--color-primary-700);border-color:var(--color-primary-800)}.btn-secondary{background:var(--control-bg);color:var(--control-fg);border-color:var(--control-border);box-shadow:var(--shadow-button)}.btn-secondary:hover:not(:disabled){background:var(--control-bg-hover);border-color:var(--control-border-hover);box-shadow:var(--shadow-button-hover)}.btn-secondary:active:not(:disabled){background:var(--control-bg-active)}.btn-ghost{background:transparent;color:var(--color-gray-600);border-color:transparent}.btn-ghost:hover:not(:disabled){background:var(--color-gray-100);color:var(--color-gray-700)}.btn-ghost:active:not(:disabled){background:var(--color-gray-200)}.btn-danger{background:var(--color-error-500);color:var(--color-white);border-color:var(--color-error-500)}.btn-danger:hover:not(:disabled){background:var(--color-error-600);border-color:var(--color-error-600)}.btn-outline{background:transparent;color:var(--color-gray-700);border-color:var(--color-gray-300)}.btn-outline:hover:not(:disabled){background:var(--color-gray-50);border-color:var(--color-gray-400)}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:var(--button-height-md);height:var(--button-height-md);padding:0;background:transparent;border:var(--border-width-1) solid transparent;border-radius:var(--radius-md);color:var(--color-gray-600);cursor:pointer;transition:all var(--transition-base);outline:none}.icon-btn:hover:not(:disabled){background:var(--color-gray-100);color:var(--color-gray-700)}.icon-btn:active:not(:disabled){background:var(--color-gray-200);transform:translateY(.5px)}.icon-btn:focus-visible{box-shadow:var(--ring-primary)}.icon-btn:disabled{opacity:.5;cursor:not-allowed}.icon-btn.active{background:linear-gradient(180deg,var(--color-primary-500),var(--color-primary-600));color:var(--color-white);box-shadow:var(--shadow-button-primary)}.icon-btn.active:hover:not(:disabled){background:var(--color-primary-600)}.icon-btn-sm{width:var(--button-height-sm);height:var(--button-height-sm)}.icon-btn-lg{width:var(--button-height-lg);height:var(--button-height-lg)}.input{width:100%;height:var(--input-height-md);padding:0 var(--space-3);font-family:var(--font-family);font-size:var(--font-size-sm);color:var(--color-gray-900);background:var(--input-bg);border:var(--border-width-1) solid var(--input-border);border-radius:var(--radius-md);outline:none;transition:all var(--transition-base)}.input::placeholder{color:var(--color-gray-400)}.input:hover:not(:disabled){border-color:var(--color-gray-400)}.input:focus{border-color:var(--input-border-focus);box-shadow:var(--ring-primary)}.input:disabled{background:var(--input-bg-disabled);cursor:not-allowed;opacity:.6}.input-sm{height:var(--input-height-sm);padding:0 var(--space-2);font-size:var(--font-size-xs)}.input-lg{height:var(--input-height-lg);padding:0 var(--space-4);font-size:var(--font-size-base)}.input-group{position:relative;display:flex;align-items:center}.input-icon{position:absolute;left:var(--space-3);color:var(--color-gray-400);pointer-events:none}.input-group .input{padding-left:var(--space-10)}.input-addon{display:flex;align-items:center;padding:0 var(--space-3);background:var(--color-gray-100);border:var(--border-width-1) solid var(--input-border);border-left:none;border-radius:0 var(--radius-md) var(--radius-md) 0;color:var(--color-gray-600);font-size:var(--font-size-sm)}.label{display:block;margin-bottom:var(--space-1);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-gray-700)}.label-hint{display:block;margin-top:var(--space-1);font-size:var(--font-size-xs);color:var(--color-gray-500)}.label-required:after{content:"*";margin-left:var(--space-1);color:var(--color-error-500)}.badge{display:inline-flex;align-items:center;padding:var(--space-1) var(--space-2);font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);border-radius:var(--radius-full);line-height:1}.badge-primary{background:var(--color-primary-100);color:var(--color-primary-700)}.badge-success{background:var(--color-success-50);color:var(--color-success-700)}.badge-warning{background:var(--color-warning-50);color:var(--color-warning-700)}.badge-error{background:var(--color-error-50);color:var(--color-error-700)}.badge-gray{background:var(--color-gray-100);color:var(--color-gray-700)}.divider{width:var(--border-width-1);height:24px;background:var(--border-color-light);margin:0 var(--space-2)}.divider-horizontal{width:100%;height:var(--border-width-1);background:var(--border-color-light);margin:var(--space-4) 0}.tooltip{position:absolute;z-index:var(--z-tooltip);padding:var(--space-2) var(--space-3);background:var(--color-gray-900);color:var(--color-white);font-size:var(--font-size-xs);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);white-space:nowrap;pointer-events:none;opacity:0;transition:opacity var(--transition-fast)}.tooltip.show{opacity:1}.tooltip-arrow{position:absolute;width:0;height:0;border-style:solid}.card{background:var(--color-white);border:var(--border-width-1) solid var(--border-color-light);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm)}.card-header{padding:var(--space-4);border-bottom:var(--border-width-1) solid var(--border-color-light)}.card-body{padding:var(--space-4)}.card-footer{padding:var(--space-4);border-top:var(--border-width-1) solid var(--border-color-light);background:var(--color-gray-50)}.btn-group{display:inline-flex;align-items:center;gap:var(--space-1)}.btn-group-connected{display:inline-flex}.btn-group-connected .btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0;margin-left:-1px}.btn-group-connected .btn:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.form-control{margin-bottom:var(--space-4)}.form-control-error .input{border-color:var(--color-error-500)}.form-control-error .input:focus{box-shadow:0 0 0 3px #ef44441a}.form-error{display:block;margin-top:var(--space-1);font-size:var(--font-size-xs);color:var(--color-error-600)}.checkbox,.radio{display:inline-flex;align-items:center;gap:var(--space-2);cursor:pointer}.checkbox input[type=checkbox],.radio input[type=radio]{width:16px;height:16px;border:var(--border-width-1) solid var(--color-gray-300);border-radius:var(--radius-sm);cursor:pointer}.radio input[type=radio]{border-radius:var(--radius-full)}.spinner{display:inline-block;width:16px;height:16px;border:2px solid var(--color-gray-200);border-top-color:var(--color-primary-500);border-radius:var(--radius-full);animation:spin .6s linear infinite}.spinner-sm{width:12px;height:12px;border-width:1.5px}.spinner-lg{width:24px;height:24px;border-width:3px}@keyframes spin{to{transform:rotate(360deg)}}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--space-8);text-align:center}.empty-state-icon{margin-bottom:var(--space-4);color:var(--color-gray-400)}.empty-state-title{margin-bottom:var(--space-2);font-size:var(--font-size-md);font-weight:var(--font-weight-semibold);color:var(--color-gray-900)}.empty-state-description{margin-bottom:var(--space-4);font-size:var(--font-size-sm);color:var(--color-gray-600)}.segmented{display:flex;gap:2px;padding:3px;background:var(--segmented-bg);border-radius:var(--radius-lg);box-shadow:var(--shadow-inner)}.segmented-item{flex:1;display:inline-flex;align-items:center;justify-content:center;gap:var(--space-1);min-width:0;padding:var(--space-1) var(--space-2);font-family:var(--font-family);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);line-height:var(--line-height-tight);color:var(--segmented-fg);background:transparent;border:none;border-radius:var(--radius-md);cursor:pointer;outline:none;transition:color var(--transition-fast),background var(--transition-fast),box-shadow var(--transition-fast),transform var(--transition-fast)}.segmented-item:hover:not(.active){color:var(--segmented-fg-active);background:#ffffff80}.segmented-item:active:not(.active){transform:translateY(.5px)}.segmented-item:focus-visible{box-shadow:var(--ring-primary)}.segmented-item.active{color:var(--segmented-fg-active);background:var(--segmented-thumb-bg);box-shadow:var(--segmented-thumb-shadow)}.toolbar-v2{display:flex;align-items:center;justify-content:space-between;height:var(--toolbar-height);padding:0 var(--space-4);background:var(--toolbar-bg);border-bottom:var(--border-width-1) solid var(--toolbar-border);box-shadow:var(--toolbar-shadow);gap:var(--space-4);position:relative;z-index:var(--z-sticky)}.toolbar-section{display:flex;align-items:center;gap:var(--space-3)}.toolbar-left{flex:0 0 auto;min-width:0}.toolbar-center{flex:1 1 auto;display:flex;align-items:center;justify-content:center;gap:var(--space-2)}.toolbar-right{flex:0 0 auto;display:flex;align-items:center;gap:var(--space-3)}.diagram-title{font-size:var(--font-size-md);font-weight:var(--font-weight-semibold);color:var(--color-gray-900);margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:300px}.diagram-badge{display:inline-flex;align-items:center;padding:var(--space-1) var(--space-2);font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);color:var(--color-gray-600);background:var(--color-gray-100);border-radius:var(--radius-full);text-transform:capitalize;line-height:1}.tool-group{display:inline-flex;align-items:center;gap:var(--space-1)}@media (max-width: 640px){.toolbar-v2{padding:0 var(--space-2)}.toolbar-left{display:none}.toolbar-center{justify-content:flex-start}.diagram-title,.diagram-badge{display:none}.tool-group{gap:var(--space-1)}.divider{display:none}}@media (min-width: 640px) and (max-width: 1024px){.diagram-title{max-width:200px}}@media (min-width: 1024px){.toolbar-center{gap:var(--space-3)}}[data-theme=dark] .toolbar-v2{background:var(--toolbar-bg);border-bottom-color:var(--toolbar-border)}[data-theme=dark] .diagram-title{color:var(--color-gray-100)}[data-theme=dark] .diagram-badge{color:var(--color-gray-400);background:var(--color-gray-700)}.toolbar-v2 .toolbar-right .btn-primary{background:var(--gv-lime);color:var(--gv-lime-ink);font-weight:700;border:1px solid var(--gv-lime-deep);box-shadow:var(--shadow-xs)}.toolbar-v2 .toolbar-right .btn-primary svg{color:var(--gv-lime-ink)}.toolbar-v2 .toolbar-right .btn-primary:hover:not(:disabled){background:var(--gv-lime-bright);box-shadow:var(--gv-lime-glow);transform:translateY(-1px)}.toolbar-v2 .toolbar-right .btn-primary:active:not(:disabled){transform:translateY(0)}.mobile-toolbar{display:none;position:fixed;bottom:0;left:0;right:0;background:#fff;border-top:1px solid #e2e8f0;padding:8px;z-index:1000;box-shadow:0 -2px 8px #0000001a;gap:8px;justify-content:space-around}.mobile-toolbar-btn{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;background:none;border:none;padding:8px 12px;cursor:pointer;border-radius:8px;transition:background .2s,transform .1s,color .2s;flex:1;max-width:96px;min-height:44px;min-width:44px;color:#475569;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;touch-action:manipulation;-webkit-user-select:none;user-select:none}.mobile-toolbar-btn:hover{background:#f1f5f9}.mobile-toolbar-btn:active{background:var(--color-success-50, #f0fdf4);color:var(--color-success-600, #059669);transform:scale(.95)}.mobile-toolbar-btn:focus-visible{outline:2px solid var(--color-success-600, #059669);outline-offset:2px}.mobile-toolbar-icon{display:block;flex-shrink:0}.mobile-toolbar-label{font-size:11px;font-weight:500;color:inherit;white-space:nowrap}@media (max-width: 768px){.mobile-toolbar{display:flex}.diagram-editor-enhanced{padding-bottom:72px}}@media (max-width: 480px){.mobile-toolbar{padding:6px}.mobile-toolbar-btn{padding:6px 8px;gap:2px}.mobile-toolbar-icon{width:20px;height:20px}.mobile-toolbar-label{font-size:10px}}.properties-panel-enhanced{width:320px;height:100%;background:var(--panel-bg);border-left:1px solid var(--border-color-light);display:flex;flex-direction:column;overflow:hidden}.panel-header{display:flex;justify-content:space-between;align-items:center;padding:16px;border-bottom:1px solid var(--border-color-light)}.panel-header h3{margin:0;font-size:16px;font-weight:600;color:var(--color-gray-900)}.close-btn{background:none;border:none;font-size:24px;color:var(--color-gray-500);cursor:pointer;padding:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center}.close-btn:hover{color:var(--color-gray-900)}.panel-tabs{display:flex;border-bottom:1px solid var(--border-color-light);background:var(--color-gray-50)}.panel-tabs button{flex:1;padding:12px 8px;background:none;border:none;border-bottom:2px solid transparent;color:var(--color-gray-500);font-size:13px;font-weight:500;cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center;gap:6px}.panel-tabs button:hover{color:var(--color-gray-900);background:var(--color-gray-100)}.panel-tabs button.active{color:#14a862;border-bottom-color:#14a862;background:var(--panel-bg)}.panel-content{flex:1;overflow-y:auto;padding:16px}.tab-content{display:flex;flex-direction:column;gap:16px}.property-section{border:1px solid var(--border-color-light);border-radius:6px;overflow:hidden}.section-header{display:flex;align-items:center;gap:8px;padding:10px 12px;background:var(--color-gray-50);cursor:pointer;-webkit-user-select:none;user-select:none}.section-header:hover{background:var(--color-gray-100)}.section-icon{font-size:10px;color:var(--color-gray-500)}.section-header h4{margin:0;font-size:13px;font-weight:600;color:var(--color-gray-900)}.section-content{padding:12px;display:flex;flex-direction:column;gap:12px}.section{margin-bottom:16px;border-bottom:1px solid var(--border-color-light);padding-bottom:12px}.section .section-header{display:flex;align-items:center;gap:8px;cursor:pointer;padding:8px 0;-webkit-user-select:none;user-select:none;background:transparent;color:var(--color-gray-500);transition:color .2s}.section .section-header:hover{color:var(--color-gray-700);background:transparent}.section .section-title{margin:0;font-size:14px;font-weight:600;color:var(--color-gray-700)}.property-row{display:flex;align-items:center;justify-content:space-between;gap:12px}.property-row-v2{display:flex;align-items:center;gap:12px;margin-bottom:12px;min-height:32px;width:100%;max-width:100%}.property-label{min-width:70px;max-width:70px;font-size:12px;color:var(--color-gray-500);flex-shrink:0;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.property-controls-v2{flex:1;display:flex;align-items:center;gap:8px;min-width:0;max-width:100%;overflow:hidden}.property-controls-v2>*{min-width:0}.property-row label{font-size:12px;color:var(--color-gray-500);font-weight:500;min-width:80px}.property-controls{flex:1;display:flex;align-items:center;gap:8px}.property-controls input[type=text],.property-controls input[type=number],.property-controls select{flex:1;padding:6px 8px;border:1px solid var(--input-border);border-radius:4px;font-size:13px;color:var(--color-gray-900);min-width:0;max-width:100%}.property-controls input[type=text]:focus,.property-controls input[type=number]:focus,.property-controls select:focus{outline:none;border-color:#14a862;box-shadow:0 0 0 3px #14a86229}.property-controls input[type=color]{width:40px;height:32px;border:1px solid var(--input-border);border-radius:4px;cursor:pointer}.color-text{max-width:100px;font-family:Courier New,monospace;font-size:12px}.number-input{max-width:80px;padding:6px 8px;border:1px solid var(--input-border);border-radius:4px;font-size:13px;font-family:inherit;color:var(--color-gray-900);background:var(--panel-bg);transition:border-color .15s ease}.number-input:focus{outline:none;border-color:#14a862}.number-input:disabled,.number-input[readonly]{background:var(--color-gray-50);color:var(--color-gray-500);cursor:not-allowed}.text-input{width:100%;padding:6px 8px;border:1px solid var(--input-border);border-radius:4px;font-size:13px;font-family:inherit;color:var(--color-gray-900);background:var(--panel-bg);transition:border-color .15s ease;min-width:0;text-overflow:ellipsis}.text-input:focus{outline:none;border-color:#14a862}.text-input:disabled,.text-input[readonly]{background:var(--color-gray-50);color:var(--color-gray-500);cursor:not-allowed}.textarea-input{width:100%;padding:8px 10px;border:1px solid var(--input-border);border-radius:4px;font-size:13px;font-family:inherit;color:var(--color-gray-900);background:var(--panel-bg);resize:vertical;min-height:60px;line-height:1.5;transition:border-color .15s ease}.textarea-input:focus{outline:none;border-color:#14a862}.property-controls input[type=range]{flex:1;min-width:0;max-width:100%;width:100%}.property-controls span{font-size:12px;color:var(--color-gray-500);min-width:40px;text-align:right}.property-controls input[type=checkbox]{width:18px;height:18px;cursor:pointer}.property-controls select,select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%236b7280' d='M6 9L1 4h10z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 8px center;padding-right:28px!important;cursor:pointer}.property-controls select:hover,select:hover{border-color:var(--color-gray-400)}.property-controls select:focus,select:focus{outline:none;border-color:#14a862;box-shadow:0 0 0 3px #14a86229}.button-group{display:flex;gap:4px;width:100%}.button-group button{flex:1;padding:6px 8px;background:var(--panel-bg);border:1px solid var(--input-border);border-radius:4px;font-size:12px;color:var(--color-gray-500);cursor:pointer;transition:all .2s}.button-group button:hover{background:var(--color-gray-50);border-color:var(--color-gray-400)}.button-group button.active{background:#14a862;border-color:#14a862;color:#fff}.button-group-vertical{display:flex;flex-direction:column;gap:6px;width:100%}.button-group-vertical button{padding:8px 12px;background:var(--panel-bg);border:1px solid var(--input-border);border-radius:4px;font-size:13px;color:var(--color-gray-700);cursor:pointer;transition:all .2s}.button-group-vertical button:hover{background:var(--color-gray-50);border-color:var(--color-gray-400)}textarea{width:100%;padding:8px;border:1px solid var(--input-border);border-radius:4px;font-size:13px;color:var(--color-gray-900);font-family:inherit;resize:vertical}textarea:focus{outline:none;border-color:#14a862;box-shadow:0 0 0 3px #14a86229}.no-selection{display:flex;flex-direction:column;align-items:center;text-align:center;padding:56px 28px;gap:6px}.no-selection-icon{width:60px;height:60px;display:flex;align-items:center;justify-content:center;border-radius:16px;background:var(--editor-bg);border:1px solid var(--editor-border);color:var(--color-primary-500);margin-bottom:14px}.no-selection-title{font-size:15px;font-weight:600;color:var(--editor-text);margin:0}.no-selection-hint{font-size:12.5px;line-height:1.55;color:var(--editor-text-muted);max-width:220px;margin:0}.multi-select-info{text-align:center;color:var(--color-gray-500);font-size:14px;padding:40px 20px;font-weight:500}.lock-toggle{display:flex;align-items:center;gap:8px;width:100%}.lock-label{font-size:13px;color:var(--color-gray-700)}.group-role{display:inline-block;padding:4px 10px;border-radius:4px;font-size:12px;font-weight:600}.group-role.parent{background:#dbeafe;color:#1e40af}.group-role.child{background:#fef3c7;color:#92400e}.group-children{margin-top:8px}.child-item,.parent-info{display:flex;align-items:center;justify-content:space-between;padding:8px;background:var(--color-gray-50);border:1px solid var(--border-color-light);border-radius:4px;margin-bottom:6px}.child-name,.parent-name{font-size:13px;color:var(--color-gray-700);font-weight:500;flex:1}.select-btn{padding:4px 12px;background:var(--panel-bg);border:1px solid var(--input-border);border-radius:4px;font-size:12px;color:#14a862;cursor:pointer;transition:all .2s}.select-btn:hover{background:#eff6ff;border-color:#14a862}.ungroup-btn{width:100%;padding:8px 12px;margin-top:8px;background:#fee2e2;border:1px solid #fca5a5;border-radius:4px;font-size:13px;color:#991b1b;font-weight:500;cursor:pointer;transition:all .2s}.ungroup-btn:hover{background:#fecaca;border-color:#ef4444}.no-group{font-size:13px;color:var(--color-gray-400);font-style:italic;margin:0;padding:8px 0}@media (max-width: 768px){.properties-panel-enhanced{width:100%;height:auto;max-height:60vh;border-left:none;border-top:1px solid var(--border-color-light)}.panel-tabs button span{display:none}.panel-tabs button{padding:12px 4px}}.node-palette{height:100%;min-height:0;display:flex;flex-direction:column;background:var(--panel-bg);border-right:var(--border-width-1) solid var(--panel-border);flex-shrink:0;position:relative}@media (max-width: 768px){.node-palette{position:fixed;top:0;left:0;bottom:0;width:min(86vw,360px)!important;min-width:0!important;height:100%;z-index:10010;box-shadow:var(--shadow-pop),0 0 0 100vmax #0f172a80;animation:node-palette-slide-in .22s var(--ease-out, ease-out)}}@keyframes node-palette-slide-in{0%{transform:translate(-101%)}to{transform:translate(0)}}.node-palette-header{padding:var(--space-4);border-bottom:var(--border-width-1) solid var(--border-color-light);background:var(--color-gray-50);flex-shrink:0}.node-palette-header-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--space-3)}.node-palette-title{margin:0;font-size:var(--font-size-md);font-weight:var(--font-weight-semibold);letter-spacing:-.01em;color:var(--color-gray-900);display:flex;align-items:center;gap:var(--space-2)}.node-palette-title svg{color:var(--color-primary-600)}.close-palette-btn{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;font-size:18px;line-height:1;background:transparent;border:var(--border-width-1) solid transparent;border-radius:var(--radius-md);color:var(--control-fg-muted);cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast),transform var(--transition-fast)}.close-palette-btn:hover{background:var(--color-gray-200);color:var(--color-gray-900)}.close-palette-btn:active{transform:translateY(.5px)}.close-palette-btn:focus-visible{outline:none;box-shadow:var(--ring-primary)}.palette-tabs{display:flex;gap:2px;margin-bottom:var(--space-3);padding:3px;background:var(--segmented-bg);border-radius:var(--radius-lg);box-shadow:var(--shadow-inner)}.palette-tab{flex:1;min-width:0;padding:var(--space-2) var(--space-1);background:transparent;border:none;border-radius:var(--radius-md);font-family:var(--font-family);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);line-height:var(--line-height-tight);color:var(--segmented-fg);cursor:pointer;outline:none;transition:color var(--transition-fast),background var(--transition-fast),box-shadow var(--transition-fast),transform var(--transition-fast);display:inline-flex;align-items:center;justify-content:center;gap:5px;text-align:center;white-space:nowrap;overflow:hidden}.palette-tab svg{flex-shrink:0;opacity:.85}.palette-tab-label{flex-shrink:0}.palette-tab-count{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--segmented-fg);opacity:.6;font-weight:var(--font-weight-normal);font-variant-numeric:tabular-nums}.palette-tab.active .palette-tab-count{color:var(--segmented-fg-active);opacity:.7}.palette-tab:hover:not(.active){color:var(--segmented-fg-active);background:var(--segmented-thumb-bg)}.palette-tab:active:not(.active){transform:translateY(.5px)}.palette-tab:focus-visible{box-shadow:var(--ring-primary)}.palette-tab.active{background:var(--segmented-thumb-bg);font-weight:var(--font-weight-semibold);color:var(--segmented-fg-active);box-shadow:var(--segmented-thumb-shadow)}.palette-search-wrapper{position:relative;width:100%}.palette-search-icon{position:absolute;left:var(--space-3);top:50%;transform:translateY(-50%);color:var(--color-gray-400);pointer-events:none;transition:color var(--transition-fast)}.palette-search-wrapper:focus-within .palette-search-icon{color:var(--color-primary-500)}.palette-search{width:100%;height:var(--input-height-md);padding:0 var(--space-3) 0 var(--space-10);border:var(--border-width-1) solid var(--input-border);border-radius:var(--radius-md);font-family:var(--font-family);font-size:var(--font-size-base);color:var(--color-gray-900);background:var(--input-bg);box-shadow:var(--shadow-xs);transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.palette-search:hover{border-color:var(--control-border-hover)}.palette-search:focus{outline:none;border-color:var(--input-border-focus);box-shadow:var(--ring-primary)}.palette-search::placeholder{color:var(--color-gray-400)}.palette-controls{display:flex;gap:var(--space-2);margin-top:var(--space-2)}.palette-control-btn{flex:1;display:inline-flex;align-items:center;justify-content:center;gap:var(--space-1);height:var(--button-height-sm);padding:0 var(--space-2);background:var(--control-bg);border:var(--border-width-1) solid var(--control-border);border-radius:var(--radius-md);box-shadow:var(--shadow-button);font-family:var(--font-family);font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);color:var(--control-fg);cursor:pointer;outline:none;transition:background var(--transition-fast),border-color var(--transition-fast),color var(--transition-fast),box-shadow var(--transition-fast),transform var(--transition-fast)}.palette-control-btn:hover{background:var(--control-bg-hover);border-color:var(--control-border-hover);color:var(--color-gray-900);box-shadow:var(--shadow-button-hover)}.palette-control-btn:active{background:var(--control-bg-active);transform:translateY(.5px)}.palette-control-btn:focus-visible{box-shadow:var(--ring-primary)}.node-palette-content{flex:1;overflow-y:auto;overflow-x:hidden;min-height:0}.palette-empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--space-10) var(--space-5);text-align:center;color:var(--color-gray-500)}.palette-empty-icon{color:var(--color-gray-300);margin-bottom:var(--space-3)}.palette-empty-title{font-size:var(--font-size-md);font-weight:var(--font-weight-semibold);color:var(--color-gray-700);margin:0 0 var(--space-2) 0}.palette-empty-text{font-size:var(--font-size-base);color:var(--color-gray-500);margin:0}.palette-section{border-bottom:var(--border-width-1) solid var(--color-gray-100)}.palette-section-header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-3) var(--space-4);background:var(--color-gray-50);cursor:pointer;-webkit-user-select:none;user-select:none;transition:background var(--transition-fast)}.palette-section-header:hover{background:var(--color-gray-100)}.palette-section-left{display:flex;align-items:center;gap:var(--space-2);flex:1}.palette-section-chevron{color:var(--color-gray-500);flex-shrink:0;transition:transform var(--transition-fast)}.palette-section-chevron.expanded{transform:rotate(90deg)}.palette-section-title{font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);color:var(--color-gray-700);margin:0}.palette-section-count{font-size:var(--font-size-sm);color:var(--color-gray-400);margin-left:var(--space-1)}.palette-section-badge{padding:2px var(--space-2);border-radius:var(--radius-full);font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);background:var(--color-primary-100);color:var(--color-primary-700)}.palette-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(70px,1fr));gap:var(--space-2);padding:var(--space-3)}.palette-item{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--space-3) var(--space-2);border:var(--border-width-1) solid var(--border-color-light);border-radius:var(--radius-lg);background:var(--color-white);cursor:pointer;transition:border-color var(--transition-fast),background var(--transition-fast),box-shadow var(--transition-fast),transform var(--transition-fast);min-height:90px}.palette-item:hover{border-color:var(--color-primary-300);background:var(--color-primary-50);box-shadow:var(--shadow-button-hover);transform:translateY(-1px)}.palette-item-icon{width:36px;height:36px;margin-bottom:var(--space-2);display:flex;align-items:center;justify-content:center}.palette-item-icon img{max-width:100%;max-height:100%;object-fit:contain}.palette-item-label{font-size:var(--font-size-xs);color:var(--color-gray-500);text-align:center;word-wrap:break-word;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;line-height:1.3}.palette-resize-handle{position:absolute;right:-2px;top:0;bottom:0;width:6px;cursor:ew-resize;background:transparent;transition:background var(--transition-fast);z-index:var(--z-sticky)}.palette-resize-handle:hover,.palette-resize-handle.resizing{background:var(--color-primary-400)}.node-palette-content::-webkit-scrollbar{width:10px}.node-palette-content::-webkit-scrollbar-track{background:transparent}.node-palette-content::-webkit-scrollbar-thumb{background:var(--color-gray-300);border:3px solid var(--panel-bg);border-radius:var(--radius-full)}.node-palette-content::-webkit-scrollbar-thumb:hover{background:var(--color-gray-400)}.palette-group{padding:var(--space-2) var(--space-3) 0}.palette-group-header{width:100%;display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);padding:var(--space-2) var(--space-3);background:var(--color-white);border:var(--border-width-1) solid var(--border-color-light);border-radius:var(--radius-md);box-shadow:var(--shadow-xs);cursor:pointer;-webkit-user-select:none;user-select:none;outline:none;transition:background var(--transition-fast),border-color var(--transition-fast),box-shadow var(--transition-fast)}.palette-group-header:hover{background:var(--control-bg-hover);border-color:var(--control-border-hover);box-shadow:var(--shadow-button)}.palette-group-header:focus-visible{box-shadow:var(--ring-primary)}.palette-group-left{display:flex;align-items:center;gap:var(--space-2);min-width:0}.palette-group-swatch{width:10px;height:10px;flex-shrink:0;border-radius:var(--radius-sm);background:var(--accent, var(--color-gray-400));box-shadow:inset 0 0 0 1px #00000014}.palette-group-chevron{flex-shrink:0;color:var(--color-gray-400);transition:transform var(--transition-fast)}.palette-group-header[aria-expanded=true] .palette-group-chevron{transform:rotate(90deg)}.palette-group-name{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-gray-800);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.palette-group-count{flex-shrink:0;font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);color:var(--color-gray-500);background:var(--color-gray-100);padding:2px var(--space-2);border-radius:var(--radius-full)}.palette-card-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--space-2);padding:var(--space-2) var(--space-3) var(--space-1)}.palette-card{position:relative;display:flex;flex-direction:column;align-items:center;gap:var(--space-1);padding:var(--space-3) var(--space-2);background:var(--color-white);border:var(--border-width-1) solid var(--border-color-light);border-radius:var(--radius-lg);cursor:grab;user-select:none;-webkit-user-select:none;outline:none;transition:border-color var(--transition-fast),background var(--transition-fast),box-shadow var(--transition-fast),transform var(--transition-fast)}.palette-card-fav{position:absolute;top:var(--space-1);right:var(--space-1);display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;padding:0;border:none;border-radius:var(--radius-md);background:transparent;color:var(--color-gray-400);cursor:pointer;opacity:0;transition:opacity var(--transition-fast),color var(--transition-fast),background var(--transition-fast);z-index:1}.palette-card:hover .palette-card-fav,.palette-card:focus-within .palette-card-fav{opacity:1}.palette-card-fav:hover{background:var(--color-white);color:var(--color-warning-500, #f59e0b)}.palette-card-fav:focus-visible{opacity:1;box-shadow:var(--ring-primary)}.palette-card-fav.is-fav{opacity:1;color:var(--color-warning-500, #f59e0b)}.palette-card-fav.is-fav svg{fill:currentColor}.palette-card:hover{border-color:var(--color-primary-300);background:var(--color-primary-50);box-shadow:var(--shadow-button-hover);transform:translateY(-1px)}.palette-card:active{cursor:grabbing;transform:translateY(0)}.palette-card:focus-visible{box-shadow:var(--ring-primary)}.palette-card-thumb{width:44px;height:44px;display:flex;align-items:center;justify-content:center}.palette-card-thumb img{max-width:100%;max-height:100%;object-fit:contain}.palette-card-name{font-size:var(--font-size-2xs);line-height:1.25;text-align:center;color:var(--color-gray-600);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;max-width:100%}.palette-tech-list{display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-3)}.palette-tech-card{width:100%;display:flex;align-items:center;gap:var(--space-3);padding:var(--space-3);background:var(--color-white);border:var(--border-width-1) solid var(--border-color-light);border-radius:var(--radius-lg);box-shadow:var(--shadow-xs);cursor:grab;text-align:left;outline:none;transition:border-color var(--transition-fast),box-shadow var(--transition-fast),transform var(--transition-fast)}.palette-tech-card:hover{border-color:var(--accent, var(--color-primary-400));box-shadow:var(--shadow-button-hover);transform:translateY(-1px)}.palette-tech-card:active{transform:translateY(0);cursor:grabbing}.palette-tech-card:focus-visible{box-shadow:var(--ring-primary)}.palette-tech-icon{width:40px;height:40px;flex-shrink:0;display:flex;align-items:center;justify-content:center;border-radius:var(--radius-md);font-size:22px;background:color-mix(in srgb,var(--accent, var(--color-primary-500)) 14%,white)}.palette-tech-text{flex:1;min-width:0}.palette-tech-title{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--accent, var(--color-primary-700));overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.palette-tech-desc{font-size:var(--font-size-xs);color:var(--color-gray-500);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.layers-panel{width:260px;height:100%;background:var(--panel-bg);border-right:1px solid var(--border-color-light);display:flex;flex-direction:column;overflow:hidden}.layers-header-actions{display:flex;align-items:center;gap:4px}.layers-list{flex:1;overflow-y:auto;padding:8px;display:flex;flex-direction:column;gap:2px}.layers-row{display:flex;align-items:center;gap:6px;padding:6px 8px;border-radius:var(--radius-md);cursor:pointer;border:1px solid transparent;transition:background var(--transition-fast),border-color var(--transition-fast)}.layers-row:hover{background:var(--control-bg-hover)}.layers-row.active{background:var(--color-primary-50, rgba(59, 130, 246, .08));border-color:var(--color-primary-500, #3b82f6)}.layers-toggle{display:flex;align-items:center;justify-content:center;width:22px;height:22px;flex-shrink:0;background:transparent;border:none;border-radius:var(--radius-sm, 4px);color:var(--color-gray-500);cursor:pointer;transition:color var(--transition-fast),background var(--transition-fast)}.layers-toggle:hover{background:var(--control-bg-hover);color:var(--color-gray-800)}.layers-toggle.locked{color:var(--color-warning-600, #d97706)}.layers-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;color:var(--color-gray-800);-webkit-user-select:none;user-select:none}.layers-name-input{flex:1;min-width:0;font-size:13px;padding:2px 6px;border:1px solid var(--color-primary-500, #3b82f6);border-radius:var(--radius-sm, 4px);background:var(--control-bg);color:var(--control-fg);outline:none}.layers-row-actions{display:flex;align-items:center;gap:2px;flex-shrink:0;opacity:0;transition:opacity var(--transition-fast)}.layers-row:hover .layers-row-actions,.layers-row.active .layers-row-actions{opacity:1}.diagram-editor-dark .layers-name{color:var(--color-gray-100, #f3f4f6)}.export-modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#00000080;display:flex;align-items:center;justify-content:center;z-index:10050}.export-modal{background:#fff;border-radius:12px;box-shadow:0 10px 40px #0003;width:90%;max-width:480px;max-height:90vh;overflow:hidden;display:flex;flex-direction:column}.export-modal-header{display:flex;justify-content:space-between;align-items:center;padding:20px 24px;border-bottom:var(--border-width-1) solid var(--color-gray-200)}.export-modal-header h2{margin:0;font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-gray-900)}.close-btn{background:none;border:var(--border-width-1) solid transparent;font-size:28px;color:var(--color-gray-500);cursor:pointer;padding:0;width:32px;height:32px;display:flex;align-items:center;justify-content:center;border-radius:var(--radius-md);transition:background var(--transition-fast),color var(--transition-fast),box-shadow var(--transition-fast),transform var(--transition-fast)}.close-btn:hover{background-color:var(--control-bg-hover);color:var(--color-gray-900)}.close-btn:active{background-color:var(--control-bg-active);transform:translateY(.5px)}.close-btn:focus-visible{outline:none;box-shadow:var(--ring-primary)}.export-modal-body{padding:24px;overflow-y:auto;flex:1}.export-option-group{margin-bottom:24px}.export-option-group:last-child{margin-bottom:0}.export-option-group>label{display:block;font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);color:var(--color-gray-700);margin-bottom:12px}.format-buttons{display:flex;gap:8px}.format-btn{flex:1;padding:10px 16px;border:var(--border-width-2) solid var(--control-border);background:var(--control-bg);border-radius:var(--radius-lg);font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);color:var(--control-fg-muted);cursor:pointer;transition:background var(--transition-fast),border-color var(--transition-fast),color var(--transition-fast),box-shadow var(--transition-fast),transform var(--transition-fast)}.format-btn:hover{border-color:var(--control-border-hover);background-color:var(--control-bg-hover)}.format-btn:active{transform:translateY(.5px)}.format-btn:focus-visible{outline:none;box-shadow:var(--ring-primary)}.format-btn.active{border-color:var(--color-primary-500);background-color:var(--color-primary-50);color:var(--color-primary-600)}.bg-options{display:flex;gap:16px}.radio-option{display:flex;align-items:center;gap:8px;cursor:pointer;padding:8px 12px;border-radius:var(--radius-md);transition:background var(--transition-fast)}.radio-option:hover{background-color:var(--control-bg-hover)}.radio-option input[type=radio]{cursor:pointer;width:18px;height:18px;accent-color:var(--color-primary-500)}.radio-option span{font-size:var(--font-size-base);color:var(--color-gray-700)}.slider{width:100%;height:6px;border-radius:var(--radius-sm);background:var(--color-gray-200);outline:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer}.slider::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:20px;height:20px;border-radius:50%;background:var(--color-primary-500);cursor:pointer;border:2px solid var(--color-white);box-shadow:var(--shadow-sm);transition:all .2s}.slider::-webkit-slider-thumb:hover{transform:scale(1.1);box-shadow:0 2px 8px #3b82f666}.slider::-moz-range-thumb{width:20px;height:20px;border-radius:50%;background:var(--color-primary-500);cursor:pointer;border:2px solid var(--color-white);box-shadow:var(--shadow-sm);transition:all .2s}.slider::-moz-range-thumb:hover{transform:scale(1.1);box-shadow:0 2px 8px #3b82f666}.slider-labels{display:flex;justify-content:space-between;margin-top:8px;font-size:var(--font-size-sm);color:var(--color-gray-500)}.help-text{margin-top:8px;font-size:var(--font-size-sm);color:var(--color-gray-500);line-height:1.4}.export-modal-footer{display:flex;justify-content:flex-end;gap:12px;padding:16px 24px;border-top:var(--border-width-1) solid var(--color-gray-200);background-color:var(--color-gray-50)}.cancel-btn,.export-btn{padding:10px 20px;border-radius:var(--radius-lg);font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);cursor:pointer;border:var(--border-width-1) solid transparent;transition:background var(--transition-fast),border-color var(--transition-fast),color var(--transition-fast),box-shadow var(--transition-fast),transform var(--transition-fast)}.cancel-btn:active,.export-btn:active{transform:translateY(.5px)}.cancel-btn:focus-visible,.export-btn:focus-visible{outline:none;box-shadow:var(--ring-primary)}.cancel-btn{background:var(--control-bg);border:var(--border-width-1) solid var(--control-border);color:var(--control-fg);box-shadow:var(--shadow-button)}.cancel-btn:hover{background-color:var(--control-bg-hover);border-color:var(--control-border-hover);box-shadow:var(--shadow-button-hover)}.export-btn{background:linear-gradient(180deg,var(--color-primary-500),var(--color-primary-600));border:var(--border-width-1) solid var(--color-primary-600);box-shadow:var(--shadow-button-primary);color:var(--color-white)}.export-btn:hover{background:linear-gradient(180deg,var(--color-primary-600),var(--color-primary-700));border-color:var(--color-primary-700);box-shadow:var(--shadow-button-primary),var(--shadow-button-hover)}.export-btn:active{background:var(--color-primary-700);border-color:var(--color-primary-800)}.json-import-modal{display:flex;flex-direction:column;gap:16px;min-height:500px;max-height:70vh}.json-import-header{display:flex;justify-content:space-between;align-items:center;gap:12px}.json-import-tabs{display:flex;gap:8px}.json-import-tabs button{padding:var(--space-2) var(--space-4);border:var(--border-width-1) solid var(--control-border);background:var(--control-bg);color:var(--control-fg);border-radius:var(--radius-md);cursor:pointer;font-size:var(--font-size-base);box-shadow:var(--shadow-button);transition:background var(--transition-fast),border-color var(--transition-fast),color var(--transition-fast),box-shadow var(--transition-fast),transform var(--transition-fast)}.json-import-tabs button:hover:not(:disabled){background:var(--control-bg-hover);border-color:var(--control-border-hover);box-shadow:var(--shadow-button-hover)}.json-import-tabs button:active:not(:disabled){transform:translateY(.5px)}.json-import-tabs button:focus-visible{outline:none;box-shadow:var(--ring-primary)}.json-import-tabs button.active{background:linear-gradient(180deg,var(--color-primary-500),var(--color-primary-600));color:var(--color-white);border-color:var(--color-primary-600);box-shadow:var(--shadow-button-primary)}.json-import-tabs button.active:hover:not(:disabled){background:linear-gradient(180deg,var(--color-primary-600),var(--color-primary-700));border-color:var(--color-primary-700)}.json-import-tabs button:disabled{opacity:.5;cursor:not-allowed}.paste-button{padding:var(--space-2) var(--space-4);border:var(--border-width-1) solid var(--color-success-600);background:linear-gradient(180deg,var(--color-success-500),var(--color-success-600));color:var(--color-white);border-radius:var(--radius-md);cursor:pointer;font-size:var(--font-size-base);box-shadow:var(--shadow-button);transition:background var(--transition-fast),border-color var(--transition-fast),box-shadow var(--transition-fast),transform var(--transition-fast)}.paste-button:hover{background:linear-gradient(180deg,var(--color-success-600),var(--color-success-700));border-color:var(--color-success-700);box-shadow:var(--shadow-button-hover)}.paste-button:active{transform:translateY(.5px)}.paste-button:focus-visible{outline:none;box-shadow:var(--ring-primary)}.json-auto-cleaned-notice{padding:12px;background:var(--color-success-50);border:var(--border-width-1) solid var(--color-success-500);border-radius:var(--radius-md);color:var(--color-success-700);font-size:var(--font-size-base);text-align:center}.json-import-content{flex:1;min-height:350px;max-height:450px;overflow:hidden;border:var(--border-width-1) solid var(--control-border);border-radius:var(--radius-md);background:var(--color-gray-50)}.json-input-textarea{width:100%;height:100%;padding:16px;border:none;outline:none;font-family:Monaco,Menlo,Ubuntu Mono,Consolas,monospace;font-size:13px;line-height:1.6;resize:none;background:#fafafa;color:#333}.json-input-textarea::placeholder{color:#999}.json-tree-view{height:100%;overflow:auto;padding:16px;font-family:Monaco,Menlo,Ubuntu Mono,Consolas,monospace;font-size:13px;line-height:1.8}.json-editor-view{height:100%;overflow:auto;padding:16px;font-family:Monaco,Menlo,Ubuntu Mono,Consolas,monospace;font-size:13px;line-height:1.6;background:#fff}.json-editor-view .jer-editor-container{font-family:Monaco,Menlo,Ubuntu Mono,Consolas,monospace!important;font-size:13px!important}.json-editor-view .jer-value-string{color:#1a1aa6}.json-editor-view .jer-value-number{color:#1c00cf}.json-editor-view .jer-value-boolean{color:#00f}.json-editor-view .jer-key-name{color:#881391}.json-tree-toggle{display:inline-block;width:16px;color:#666;font-size:10px;transition:transform .2s}.json-placeholder{display:flex;align-items:center;justify-content:center;height:100%;color:#999;font-size:14px}.json-error{padding:12px;background:var(--color-error-50);border:var(--border-width-1) solid var(--color-error-500);border-radius:var(--radius-md);color:var(--color-error-700);font-size:13px;font-family:Monaco,Menlo,monospace}.json-validation-info{padding:12px;background:var(--color-primary-50);border:var(--border-width-1) solid var(--color-primary-500);border-radius:var(--radius-md)}.json-stats{display:flex;flex-wrap:wrap;gap:16px;font-size:13px;color:#1976d2}.json-stats span:first-child{font-weight:600}.json-tree-view::-webkit-scrollbar,.json-input-textarea::-webkit-scrollbar{width:10px;height:10px}.json-tree-view::-webkit-scrollbar-track,.json-input-textarea::-webkit-scrollbar-track{background:#f1f1f1;border-radius:5px}.json-tree-view::-webkit-scrollbar-thumb,.json-input-textarea::-webkit-scrollbar-thumb{background:#888;border-radius:5px}.json-tree-view::-webkit-scrollbar-thumb:hover,.json-input-textarea::-webkit-scrollbar-thumb:hover{background:#555}@media (max-width: 768px){.json-import-modal{max-height:80vh}.json-import-header{flex-direction:column;align-items:stretch}.json-import-tabs{width:100%}.json-import-tabs button{flex:1}}.comments-panel{width:280px;height:100%;background:var(--panel-bg);border-left:1px solid var(--border-color-light);display:flex;flex-direction:column;overflow:hidden}.comments-header-actions{display:flex;align-items:center;gap:4px}.comments-count{display:inline-block;min-width:18px;padding:0 5px;margin-left:4px;font-size:11px;line-height:16px;text-align:center;border-radius:9px;background:var(--color-primary-500, #3b82f6);color:#fff}.comments-filter-btn{font-size:11px;padding:2px 8px;border-radius:var(--radius-sm, 4px);border:1px solid var(--border-color-light);background:var(--control-bg);color:var(--color-gray-600);cursor:pointer}.comments-filter-btn.active{color:var(--color-primary-600, #2563eb);border-color:var(--color-primary-500, #3b82f6)}.comments-composer{display:flex;flex-direction:column;gap:6px;padding:8px;border-bottom:1px solid var(--border-color-light)}.comments-textarea{width:100%;resize:vertical;font-size:13px;padding:6px 8px;border:1px solid var(--border-color-light);border-radius:var(--radius-md, 6px);background:var(--control-bg);color:var(--control-fg);outline:none;font-family:inherit}.comments-textarea:focus{border-color:var(--color-primary-500, #3b82f6)}.comments-add-btn{align-self:flex-end;display:inline-flex;align-items:center;gap:4px;font-size:12px;padding:4px 10px;border:none;border-radius:var(--radius-md, 6px);background:var(--color-primary-500, #3b82f6);color:#fff;cursor:pointer}.comments-add-btn:disabled{opacity:.5;cursor:not-allowed}.comments-list{flex:1;overflow-y:auto;padding:8px;display:flex;flex-direction:column;gap:6px}.comments-empty{font-size:12px;color:var(--color-gray-500);text-align:center;padding:16px 8px}.comments-row{padding:8px;border-radius:var(--radius-md, 6px);border:1px solid var(--border-color-light);background:var(--control-bg);cursor:pointer;transition:border-color var(--transition-fast),background var(--transition-fast)}.comments-row:hover{background:var(--control-bg-hover)}.comments-row.active{border-color:var(--color-primary-500, #3b82f6);background:var(--color-primary-50, rgba(59, 130, 246, .08))}.comments-row.resolved{opacity:.6}.comments-row.resolved .comments-body{text-decoration:line-through}.comments-row-head{display:flex;align-items:center;gap:6px;margin-bottom:4px}.comments-author{font-size:12px;font-weight:600;color:var(--color-gray-800)}.comments-anchor-kind{font-size:10px;color:var(--color-gray-500);text-transform:uppercase;letter-spacing:.03em}.comments-row-actions{margin-left:auto;display:flex;gap:2px}.comments-body{font-size:13px;color:var(--color-gray-700);white-space:pre-wrap;word-break:break-word}.comments-replies{margin-top:6px;display:flex;flex-direction:column;gap:3px;padding-left:4px;border-left:2px solid var(--border-color-light)}.comments-reply{display:flex;align-items:baseline;gap:4px;font-size:12px}.comments-reply-icon{color:var(--color-gray-400);flex-shrink:0}.comments-reply-author{font-weight:600;color:var(--color-gray-700)}.comments-reply-text{color:var(--color-gray-600);word-break:break-word}.comments-reply-trigger{margin-top:6px;font-size:11px;background:none;border:none;color:var(--color-primary-600, #2563eb);cursor:pointer;padding:0}.comments-reply-composer{margin-top:6px;display:flex;gap:4px}.comments-reply-input{flex:1;min-width:0;font-size:12px;padding:4px 6px;border:1px solid var(--color-primary-500, #3b82f6);border-radius:var(--radius-sm, 4px);background:var(--control-bg);color:var(--control-fg);outline:none}.comments-reply-send{font-size:12px;padding:4px 10px;border:none;border-radius:var(--radius-sm, 4px);background:var(--color-primary-500, #3b82f6);color:#fff;cursor:pointer}.diagram-editor-dark .comments-author,.diagram-editor-dark .comments-body{color:var(--color-gray-100, #f3f4f6)}.diagram-editor-dark .comments-reply-author{color:var(--color-gray-200, #e5e7eb)}.command-palette-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--z-overlay);display:flex;align-items:flex-start;justify-content:center;padding:var(--space-4);background:#10182852;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);animation:command-palette-fade var(--transition-fast)}@keyframes command-palette-fade{0%{opacity:0}to{opacity:1}}.command-palette{position:relative;z-index:var(--z-modal);width:100%;max-width:560px;margin-top:15vh;display:flex;flex-direction:column;max-height:70vh;background:var(--panel-bg, var(--control-bg));border:var(--border-width-1) solid var(--control-border);border-radius:var(--radius-xl);box-shadow:var(--shadow-pop);overflow:hidden;font-family:var(--font-family);animation:command-palette-pop var(--transition-fast)}@keyframes command-palette-pop{0%{opacity:0;transform:translateY(-6px) scale(.99)}to{opacity:1;transform:translateY(0) scale(1)}}.command-palette-search{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-3) var(--space-4);border-bottom:var(--border-width-1) solid var(--control-border)}.command-palette-search-icon{flex:0 0 auto;color:var(--control-fg-muted)}.command-palette-input{flex:1;min-width:0;border:none;outline:none;background:transparent;color:var(--color-gray-900);font-family:inherit;font-size:var(--font-size-md);line-height:var(--line-height-normal);padding:0}.command-palette-input::placeholder{color:var(--color-gray-400)}.command-palette-list{flex:1;max-height:52vh;overflow-y:auto;padding:var(--space-2)}.command-palette-group+.command-palette-group{margin-top:var(--space-1)}.command-palette-group-label{padding:var(--space-2) var(--space-3) var(--space-1);font-size:var(--font-size-2xs);font-weight:var(--font-weight-semibold);letter-spacing:.06em;text-transform:uppercase;color:var(--color-gray-400)}.command-palette-item{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);cursor:pointer;color:var(--control-fg);transition:background-color var(--transition-fast),color var(--transition-fast);-webkit-user-select:none;user-select:none}.command-palette-item.highlighted{background:var(--color-primary-50);color:var(--color-gray-900)}.command-palette-item.disabled{opacity:.45;cursor:default;pointer-events:none}.command-palette-item-icon{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;color:var(--control-fg-muted)}.command-palette-item.highlighted .command-palette-item-icon{color:var(--color-primary-600)}.command-palette-item-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--font-size-base);line-height:var(--line-height-tight)}.command-palette-shortcut{flex:0 0 auto;padding:2px var(--space-2);border:var(--border-width-1) solid var(--control-border);border-radius:var(--radius-sm);background:var(--control-bg);color:var(--color-gray-400);font-family:var(--font-family-mono);font-size:var(--font-size-2xs);line-height:1.4;white-space:nowrap}.command-palette-empty{padding:var(--space-8) var(--space-4);text-align:center;color:var(--color-gray-400);font-size:var(--font-size-base)}.context-menu{min-width:200px;background:var(--color-white);border:var(--border-width-1) solid var(--color-gray-200);border-radius:var(--radius-lg);box-shadow:var(--shadow-pop);padding:var(--space-1);animation:context-menu-appear .15s ease-out;overflow:hidden}.context-menu-item{display:flex;align-items:center;gap:10px;width:100%;padding:var(--space-2) var(--space-3);border:var(--border-width-1) solid transparent;background:transparent;color:var(--color-gray-700);font-size:var(--font-size-base);text-align:left;cursor:pointer;border-radius:var(--radius-sm);transition:background var(--transition-fast),color var(--transition-fast),box-shadow var(--transition-fast),transform var(--transition-fast);position:relative}.context-menu-item:hover:not(.disabled){background:var(--control-bg-hover);color:var(--color-gray-900)}.context-menu-item:active:not(.disabled){background:var(--control-bg-active);transform:translateY(.5px)}.context-menu-item.disabled{opacity:.4;cursor:not-allowed}.context-menu-item.destructive{color:var(--color-error-600)}.context-menu-item.destructive:hover:not(.disabled){background:var(--color-error-50);color:var(--color-error-700)}.context-menu-item.destructive:focus-visible{box-shadow:var(--ring-danger)}.context-menu-icon{flex-shrink:0;width:16px;height:16px;display:flex;align-items:center;justify-content:center;color:var(--color-gray-500)}.context-menu-item:hover:not(.disabled) .context-menu-icon{color:var(--color-gray-700)}.context-menu-item.destructive .context-menu-icon{color:var(--color-error-600)}.context-menu-item.destructive:hover:not(.disabled) .context-menu-icon{color:var(--color-error-700)}.context-menu-label{flex:1;font-weight:var(--font-weight-medium)}.context-menu-shortcut{font-size:var(--font-size-sm);color:var(--color-gray-400);margin-left:auto;font-family:var(--font-family-mono)}.context-menu-divider{height:1px;background:var(--color-gray-200);margin:var(--space-1) 0}.context-menu-category{padding:6px 12px 4px;font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);text-transform:uppercase;letter-spacing:.5px;color:var(--color-gray-400)}.context-menu-submenu-indicator{margin-left:auto;color:var(--color-gray-400);transition:transform .2s}.context-menu-item:hover .context-menu-submenu-indicator{transform:translate(2px)}.outline-panel{width:280px;height:100%;background:var(--panel-bg);border-right:1px solid var(--border-color-light);display:flex;flex-direction:column;overflow:hidden}.outline-search{position:relative;display:flex;align-items:center;padding:8px 12px;border-bottom:1px solid var(--border-color-light);gap:6px}.outline-search-icon{color:var(--color-gray-400);flex-shrink:0}.outline-search-input{flex:1;border:1px solid var(--control-border);border-radius:var(--radius-md);background:var(--control-bg);color:var(--control-fg);font-size:13px;padding:6px 8px;outline:none}.outline-search-input:focus-visible{box-shadow:var(--ring-primary);border-color:var(--color-primary-500)}.outline-search-clear{background:transparent;border:none;color:var(--color-gray-400);cursor:pointer;display:flex;align-items:center;padding:2px}.outline-search-clear:hover{color:var(--color-gray-700)}.outline-content{flex:1;overflow-y:auto;padding:8px}.outline-section-title{display:flex;align-items:center;justify-content:space-between;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--color-gray-500);padding:8px 8px 4px}.outline-count{font-weight:500;color:var(--color-gray-400)}.outline-empty{font-size:12px;color:var(--color-gray-400);padding:4px 8px 8px}.outline-row{display:flex;align-items:center;gap:8px;width:100%;text-align:left;background:transparent;border:none;border-radius:var(--radius-md);padding:6px 8px;cursor:pointer;color:var(--color-gray-800);font-size:13px;transition:background var(--transition-fast)}.outline-row:hover{background:var(--control-bg-hover)}.outline-row-icon{display:flex;align-items:center;justify-content:center;width:18px;height:18px;flex-shrink:0;color:var(--color-gray-500)}.outline-row-img{width:16px;height:16px;object-fit:contain}.outline-row-emoji{font-size:14px;line-height:1}.outline-row-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.diagram-editor-dark .outline-row{color:var(--color-gray-100, #f3f4f6)}.canvas-tab-bar{display:flex;align-items:center;height:40px;background:var(--color-gray-50);border-top:var(--border-width-1) solid var(--color-gray-200);flex-shrink:0;-webkit-user-select:none;user-select:none;position:relative;z-index:var(--z-fixed);overflow:hidden}.canvas-tabs-scroll{display:flex;align-items:center;height:100%;overflow-x:auto;overflow-y:hidden;gap:2px;padding:0 var(--space-2);scrollbar-width:thin;scrollbar-color:var(--color-gray-300) var(--color-gray-50);flex:1;min-width:0}.canvas-tabs-scroll::-webkit-scrollbar{height:4px}.canvas-tabs-scroll::-webkit-scrollbar-track{background:var(--color-gray-50)}.canvas-tabs-scroll::-webkit-scrollbar-thumb{background:var(--color-gray-300);border-radius:2px}.canvas-tabs-scroll::-webkit-scrollbar-thumb:hover{background:var(--color-gray-400)}.canvas-tab{display:flex;align-items:center;height:32px;min-width:120px;max-width:200px;padding:0 var(--space-2);background:var(--control-bg);border:var(--border-width-1) solid var(--control-border);border-bottom:none;border-radius:var(--radius-md) var(--radius-md) 0 0;cursor:pointer;transition:background var(--transition-fast),border-color var(--transition-fast),box-shadow var(--transition-fast),color var(--transition-fast);position:relative;flex-shrink:0}.canvas-tab:hover{background:var(--control-bg-hover);border-color:var(--control-border-hover)}.canvas-tab.active{background:var(--color-white);border-color:var(--editor-border-strong);border-top:2px solid var(--gv-lime);border-bottom:2px solid var(--color-white);margin-bottom:-1px;box-shadow:0 -2px 8px #c5f24e33,var(--shadow-button);z-index:1}.canvas-tab.editing{background:var(--color-white);border-color:var(--color-primary-500)}.canvas-tab[draggable=true]{cursor:grab}.canvas-tab.dragging{opacity:.5;cursor:grabbing;transform:scale(.95)}.canvas-tab.drag-over{border-left:3px solid var(--color-primary-500);padding-left:5px;background:var(--color-primary-50)}.canvas-tab-content{display:flex;align-items:center;justify-content:space-between;width:100%;gap:8px}.canvas-tab-name{flex:1;font-size:13px;font-weight:var(--font-weight-medium);color:var(--color-gray-700);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.canvas-tab.active .canvas-tab-name{color:var(--color-primary-800);font-weight:var(--font-weight-semibold)}.canvas-tab-unsaved{color:var(--color-error-600);margin-left:2px;font-weight:var(--font-weight-bold)}.canvas-tab-actions{display:none;align-items:center;gap:4px;flex-shrink:0}.canvas-tab:hover .canvas-tab-actions,.canvas-tab.active .canvas-tab-actions{display:flex}.canvas-tab-action{display:flex;align-items:center;justify-content:center;width:20px;height:20px;padding:0;background:transparent;border:var(--border-width-1) solid transparent;border-radius:var(--radius-sm);color:var(--color-gray-500);cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast),box-shadow var(--transition-fast),transform var(--transition-fast)}.canvas-tab-action:hover{background:var(--control-bg-active);color:var(--color-gray-900)}.canvas-tab-action:active{transform:translateY(.5px)}.canvas-tab-action:focus-visible{outline:none;box-shadow:var(--ring-primary)}.canvas-tab-action:disabled{opacity:.3;cursor:not-allowed}.canvas-tab-action:disabled:hover{background:transparent;color:var(--color-gray-500)}.canvas-tab-close:hover{background:var(--color-error-50);color:var(--color-error-600)}.canvas-tab-edit{display:flex;align-items:center;gap:4px;width:100%}.canvas-tab-edit-input{flex:1;min-width:0;height:24px;padding:0 6px;font-size:13px;font-weight:var(--font-weight-medium);color:var(--color-primary-800);background:var(--color-primary-50);border:var(--border-width-1) solid var(--color-primary-500);border-radius:var(--radius-sm);outline:none}.canvas-tab-edit-input:focus-visible{box-shadow:var(--ring-primary)}.canvas-tab-edit-confirm{display:flex;align-items:center;justify-content:center;width:20px;height:20px;padding:0;background:linear-gradient(180deg,var(--color-primary-500),var(--color-primary-600));border:var(--border-width-1) solid var(--color-primary-600);border-radius:var(--radius-sm);color:var(--color-white);box-shadow:var(--shadow-button-primary);cursor:pointer;transition:background var(--transition-fast),border-color var(--transition-fast),box-shadow var(--transition-fast),transform var(--transition-fast);flex-shrink:0}.canvas-tab-edit-confirm:hover{background:linear-gradient(180deg,var(--color-primary-600),var(--color-primary-700));border-color:var(--color-primary-700)}.canvas-tab-edit-confirm:active{transform:translateY(.5px)}.canvas-tab-edit-confirm:focus-visible{outline:none;box-shadow:var(--ring-primary)}.canvas-tab-add{display:flex!important;align-items:center;justify-content:center;width:28px;height:28px;margin:0 var(--space-1);background:transparent;border:var(--border-width-1) solid transparent;border-radius:var(--radius-md);color:var(--color-gray-500);cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast),border-color var(--transition-fast),box-shadow var(--transition-fast),transform var(--transition-fast);flex-shrink:0}.canvas-tab-add:hover{background:var(--control-bg-active);color:var(--color-gray-800)}.canvas-tab-add:active{background:var(--color-gray-200);transform:translateY(.5px)}.canvas-tab-add:focus-visible{outline:none;box-shadow:var(--ring-primary)}@media (max-width: 768px){.canvas-tab{min-width:100px;max-width:150px}.canvas-tab-name{font-size:12px}.canvas-tab-action{width:18px;height:18px}}@keyframes tab-appear{0%{opacity:0;transform:translateY(4px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}.canvas-tab{animation:tab-appear .15s ease-out}.canvas-tab-context-menu{min-width:180px;background:var(--color-white);border:var(--border-width-1) solid var(--color-gray-200);border-radius:var(--radius-lg);box-shadow:var(--shadow-pop);padding:var(--space-1);overflow:hidden;animation:context-menu-appear .15s ease-out}@keyframes context-menu-appear{0%{opacity:0;transform:translateY(-4px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}.context-menu-item{width:100%;display:flex;align-items:center;gap:10px;padding:var(--space-2) var(--space-3);background:transparent;border:var(--border-width-1) solid transparent;border-radius:var(--radius-sm);color:var(--color-gray-700);font-size:var(--font-size-base);cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast),box-shadow var(--transition-fast),transform var(--transition-fast);text-align:left}.context-menu-item:hover:not(:disabled){background:var(--control-bg-hover);color:var(--color-gray-900)}.context-menu-item:active:not(:disabled){background:var(--control-bg-active);transform:translateY(.5px)}.context-menu-item:focus-visible{outline:none;box-shadow:var(--ring-primary)}.context-menu-item:disabled{opacity:.5;cursor:not-allowed}.context-menu-separator{height:1px;background:var(--color-gray-200);margin:var(--space-1) 0}.multi-canvas-editor{display:flex;flex-direction:column;width:100%;height:100%;min-height:0;overflow:hidden}.multi-canvas-content{flex:1;min-height:0;overflow:hidden;position:relative}.multi-canvas-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;height:100%;padding:40px;background:#f9fafb}.multi-canvas-empty p{margin:0 0 16px;font-size:16px;font-weight:500;color:#6b7280}.multi-canvas-empty button{padding:10px 20px;background:#3b82f6;border:none;border-radius:6px;color:#fff;font-size:14px;font-weight:600;cursor:pointer;transition:all .2s}.multi-canvas-empty button:hover{background:#2563eb;transform:translateY(-1px);box-shadow:0 4px 6px #3b82f633}.multi-canvas-empty button:active{background:#1d4ed8;transform:translateY(0)}@media (max-width: 768px){.multi-canvas-editor{padding-bottom:60px}}.json-import-sidebar{position:relative;display:flex;flex-direction:column;gap:12px;padding:16px;background:#f9f9f9;border-radius:8px;height:100%;min-width:300px;max-width:800px;flex-shrink:0}.sidebar-resize-handle{position:absolute;top:0;right:0;width:6px;height:100%;cursor:ew-resize;background:transparent;z-index:10;transition:background .2s}.sidebar-resize-handle:hover{background:#2196f34d}.sidebar-resize-handle:active{background:#2196f380}.json-import-sidebar h3{margin:0 0 8px;font-size:18px;color:#333}.json-sidebar-tabs{display:flex;gap:6px;margin-bottom:8px}.json-sidebar-tabs button{flex:1;padding:8px 12px;border:1px solid #ddd;background:#fff;border-radius:6px;cursor:pointer;font-size:13px;transition:all .2s}.json-sidebar-tabs button:hover:not(:disabled){background:#f5f5f5}.json-sidebar-tabs button.active{background:#2196f3;color:#fff;border-color:#2196f3}.json-sidebar-tabs button:disabled{opacity:.5;cursor:not-allowed}.paste-button-sidebar{padding:8px 12px;border:1px solid #4caf50;background:#4caf50;color:#fff;border-radius:6px;cursor:pointer;font-size:13px;transition:all .2s;width:100%}.paste-button-sidebar:hover{background:#45a049}.json-auto-cleaned-notice-sidebar{padding:8px 12px;background:#e8f5e9;border:1px solid #4caf50;border-radius:6px;color:#2e7d32;font-size:12px;text-align:center}.json-sidebar-content{flex:1;min-height:300px;max-height:450px;overflow:hidden;border:1px solid #ddd;border-radius:6px;background:#fff}.json-sidebar-textarea{width:100%;height:100%;padding:12px;border:none;outline:none;font-family:Monaco,Menlo,Ubuntu Mono,Consolas,monospace;font-size:12px;line-height:1.5;resize:none;background:#fff;color:#333}.json-sidebar-textarea::placeholder{color:#999;font-size:12px}.json-tree-view-sidebar{height:100%;overflow:auto;padding:12px;font-family:Monaco,Menlo,Ubuntu Mono,Consolas,monospace;font-size:12px;line-height:1.6}.json-editor-view-sidebar{height:100%;overflow:auto;padding:12px;font-family:Monaco,Menlo,Ubuntu Mono,Consolas,monospace;font-size:12px;line-height:1.5;background:#fff}.json-editor-view-sidebar .jer-editor-container{font-family:Monaco,Menlo,Ubuntu Mono,Consolas,monospace!important;font-size:12px!important}.json-editor-view-sidebar .jer-value-string{color:#1a1aa6}.json-editor-view-sidebar .jer-value-number{color:#1c00cf}.json-editor-view-sidebar .jer-value-boolean{color:#00f}.json-editor-view-sidebar .jer-key-name{color:#881391}.json-tree-item{padding:2px 0}.json-tree-node{margin:2px 0}.json-tree-header{cursor:pointer;padding:2px 0;-webkit-user-select:none;user-select:none;display:flex;align-items:center;gap:4px}.json-tree-header:hover{background:#2196f30d}.json-tree-toggle{display:inline-block;width:14px;color:#666;font-size:9px}.json-tree-children{margin-left:8px;border-left:1px solid #e0e0e0;padding-left:8px}.json-key{color:#881391;font-weight:500}.json-string{color:#1a1aa6}.json-number{color:#1c00cf}.json-boolean{color:#00f;font-weight:700}.json-null{color:gray;font-style:italic}.json-bracket{color:#666}.json-collapsed-indicator{color:#999;font-style:italic;margin-left:6px}.json-placeholder-sidebar{display:flex;align-items:center;justify-content:center;height:100%;color:#999;font-size:13px}.json-validation-info-sidebar{display:flex;flex-wrap:wrap;gap:12px;padding:8px 12px;background:#f0f7ff;border:1px solid #2196f3;border-radius:6px;font-size:12px;color:#1976d2}.json-validation-info-sidebar span:first-child{font-weight:600}.json-error-sidebar{padding:8px 12px;background:#ffebee;border:1px solid #f44336;border-radius:6px;color:#c62828;font-size:12px;font-family:Monaco,Menlo,monospace}.import-button-sidebar{padding:10px 16px;border:none;background:#2196f3;color:#fff;border-radius:6px;cursor:pointer;font-size:14px;font-weight:500;transition:all .2s}.import-button-sidebar:hover:not(:disabled){background:#1976d2}.import-button-sidebar:disabled{opacity:.5;cursor:not-allowed}.json-tree-view-sidebar::-webkit-scrollbar,.json-sidebar-textarea::-webkit-scrollbar,.json-editor-view-sidebar::-webkit-scrollbar{width:8px;height:8px}.json-tree-view-sidebar::-webkit-scrollbar-track,.json-sidebar-textarea::-webkit-scrollbar-track,.json-editor-view-sidebar::-webkit-scrollbar-track{background:#f1f1f1;border-radius:4px}.json-tree-view-sidebar::-webkit-scrollbar-thumb,.json-sidebar-textarea::-webkit-scrollbar-thumb,.json-editor-view-sidebar::-webkit-scrollbar-thumb{background:#888;border-radius:4px}.json-tree-view-sidebar::-webkit-scrollbar-thumb:hover,.json-sidebar-textarea::-webkit-scrollbar-thumb:hover,.json-editor-view-sidebar::-webkit-scrollbar-thumb:hover{background:#555}.gv2{--ink: #0a0d14;--ink-2: #0e131c;--surface: #121826;--surface-2: #161d2c;--line: #1f2937;--line-2: #2a3547;--text: #e8edf5;--muted: #8d98ac;--faint: #5c677a;--lime: #c5f24e;--lime-soft: #d9f99d;--lime-dim: rgba(197, 242, 78, .14);--display: "Bricolage Grotesque", "Sora", sans-serif;--body: "Sora", system-ui, sans-serif;--mono: "JetBrains Mono", ui-monospace, monospace;position:relative;height:100%;overflow-y:auto;background:var(--ink);color:var(--text);font-family:var(--body);-webkit-font-smoothing:antialiased}.gv2-grid-bg{position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:0;background-image:radial-gradient(circle at 1px 1px,rgba(255,255,255,.05) 1px,transparent 0);background-size:28px 28px;-webkit-mask-image:linear-gradient(180deg,#000 0%,#000 55%,transparent 100%);mask-image:linear-gradient(180deg,#000 0%,#000 55%,transparent 100%)}.gv2-glow{position:fixed;top:-280px;right:-160px;width:760px;height:760px;pointer-events:none;z-index:0;background:radial-gradient(circle,#c5f24e29,#c5f24e00 60%);filter:blur(20px)}.gv2>*:not(.gv2-grid-bg):not(.gv2-glow){position:relative;z-index:1}@keyframes gv2-rise{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}[data-reveal]{opacity:0;animation:gv2-rise .7s cubic-bezier(.2,.7,.2,1) forwards;animation-delay:var(--d, 0ms)}.gv2-nav{display:flex;align-items:center;justify-content:space-between;max-width:1240px;margin:0 auto;padding:26px 40px}.gv2-wordmark{font-family:var(--display);font-weight:800;font-size:22px;letter-spacing:-.02em;display:flex;align-items:center;gap:9px}.gv2-mark{color:var(--lime);font-size:19px}.gv2-mark-accent{color:var(--lime)}.gv2-nav-right{display:flex;align-items:center;gap:20px}.gv2-nav-tag{font-family:var(--mono);font-size:11px;color:var(--faint);letter-spacing:.04em;text-transform:uppercase}.gv2-nav-btn{font-family:var(--body);font-size:14px;font-weight:600;color:var(--ink);background:var(--lime);border:none;border-radius:8px;padding:9px 16px;cursor:pointer;transition:transform .12s ease,box-shadow .12s ease}.gv2-nav-btn:hover{transform:translateY(-1px);box-shadow:0 8px 24px #c5f24e47}.gv2-hero{max-width:1100px;margin:0 auto;padding:60px 40px 40px}.gv2-kicker{font-family:var(--mono);font-size:12.5px;letter-spacing:.12em;color:var(--lime);margin-bottom:26px}.gv2-title{font-family:var(--display);font-weight:800;font-size:clamp(44px,6.4vw,88px);line-height:.98;letter-spacing:-.035em;margin:0 0 26px;color:#f4f7fb}.gv2-title-accent{color:var(--lime);background:linear-gradient(180deg,transparent 64%,var(--lime-dim) 64%)}.gv2-lede{font-size:clamp(16px,1.6vw,19px);line-height:1.65;color:var(--muted);max-width:660px;margin:0 0 34px}.gv2-lede strong{color:var(--text);font-weight:600}.gv2-cta{display:flex;align-items:center;gap:18px;flex-wrap:wrap;margin-bottom:56px}.gv2-btn-primary{font-family:var(--body);font-size:16px;font-weight:600;color:var(--ink);background:var(--lime);border:none;border-radius:11px;padding:14px 26px;cursor:pointer;box-shadow:0 10px 30px #c5f24e38;transition:transform .14s ease,box-shadow .14s ease}.gv2-btn-primary:hover{transform:translateY(-2px);box-shadow:0 14px 40px #c5f24e57}.gv2-btn-ghost{font-family:var(--body);font-size:15px;font-weight:600;color:var(--text);text-decoration:none;padding:14px 8px;border-bottom:1px solid transparent;transition:color .14s,border-color .14s}.gv2-btn-ghost:hover{color:var(--lime);border-color:var(--lime)}.gv2-caps{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line);border:1px solid var(--line);border-radius:14px;overflow:hidden}.gv2-cap{display:flex;gap:14px;align-items:flex-start;padding:22px;background:var(--ink-2)}.gv2-cap-big{font-family:var(--display);font-weight:800;font-size:30px;color:var(--lime);line-height:1;min-width:36px}.gv2-cap-text{display:flex;flex-direction:column;gap:4px}.gv2-cap-label{font-weight:600;font-size:14.5px;color:var(--text)}.gv2-cap-sub{font-size:12px;color:var(--faint);line-height:1.45}.gv2-showcase{max-width:1240px;margin:0 auto;padding:70px 40px 30px}.gv2-section-head{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:30px;flex-wrap:wrap;gap:8px}.gv2-section-title{font-family:var(--display);font-weight:700;font-size:30px;letter-spacing:-.02em;margin:0}.gv2-section-meta{font-family:var(--mono);font-size:12px;color:var(--faint)}.gv2-type{font-family:var(--mono);font-size:10.5px;font-weight:600;letter-spacing:.08em;color:var(--lime);background:var(--lime-dim);border:1px solid rgba(197,242,78,.3);border-radius:6px;padding:3px 9px;align-self:flex-start}.gv2-featured,.gv2-card{text-align:left;cursor:pointer;padding:0;color:var(--text);background:var(--surface);border:1px solid var(--line);border-radius:16px;overflow:hidden;transition:transform .16s cubic-bezier(.2,.7,.2,1),border-color .16s,box-shadow .16s}.gv2-featured:hover,.gv2-card:hover{transform:translateY(-4px);border-color:#c5f24e73;box-shadow:0 20px 50px #00000080,0 0 0 1px #c5f24e1f}.gv2-featured img,.gv2-card img{transition:transform .3s cubic-bezier(.2,.7,.2,1)}.gv2-featured:hover img,.gv2-card:hover img{transform:scale(1.03)}.gv2-open{font-family:var(--mono);font-size:12px;font-weight:600;color:var(--lime);margin-top:auto}.gv2-featured{display:grid;grid-template-columns:1.5fr 1fr;margin-bottom:24px;min-height:320px}.gv2-featured-thumb{background:#fbfcfe;display:flex;align-items:center;justify-content:center;border-right:1px solid var(--line);overflow:hidden;padding:18px}.gv2-featured-thumb img{width:100%;height:100%;object-fit:contain;object-position:center}.gv2-featured-body{display:flex;flex-direction:column;gap:14px;padding:34px}.gv2-featured-title{font-family:var(--display);font-weight:700;font-size:27px;letter-spacing:-.02em;margin:6px 0 0}.gv2-featured-desc{font-size:15px;line-height:1.6;color:var(--muted);margin:0}.gv2-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}.gv2-card{display:flex;flex-direction:column}.gv2-card-thumb{position:relative;height:200px;background:#fbfcfe;border-bottom:1px solid var(--line);overflow:hidden;padding:14px;box-sizing:border-box}.gv2-card-thumb img{width:100%;height:100%;object-fit:contain;object-position:center}.gv2-card-thumb .gv2-type{position:absolute;top:12px;left:12px;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.gv2-card-body{display:flex;flex-direction:column;gap:7px;padding:18px 20px 20px;flex:1}.gv2-card-title{font-family:var(--display);font-weight:700;font-size:17.5px;letter-spacing:-.01em;margin:0}.gv2-card-desc{font-size:13px;line-height:1.55;color:var(--muted);margin:0 0 10px;flex:1}.gv2-footer{max-width:1240px;margin:40px auto 0;padding:60px 40px 64px;display:flex;align-items:center;gap:12px;color:var(--faint);font-size:13px;border-top:1px solid var(--line)}.gv2-footer strong{color:var(--muted)}.gv2-projects{max-width:1240px;margin:0 auto;padding:56px 40px 10px}.gv2-proj-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:18px}.gv2-proj{position:relative;text-align:left;cursor:pointer;color:var(--text);background:var(--surface);border:1px solid var(--line);border-radius:14px;overflow:hidden;padding:0;font-family:var(--body);transition:transform .16s cubic-bezier(.2,.7,.2,1),border-color .16s,box-shadow .16s}.gv2-proj:hover{transform:translateY(-3px);border-color:#c5f24e66;box-shadow:0 16px 40px #00000080,0 0 0 1px #c5f24e1a}.gv2-proj-new{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;min-height:184px;background:transparent;border:1px dashed var(--line-2);text-align:center;padding:20px}.gv2-proj-new:hover{border-color:var(--lime);border-style:dashed}.gv2-proj-plus{font-size:30px;line-height:1;color:var(--lime);font-weight:300;width:46px;height:46px;display:flex;align-items:center;justify-content:center;border-radius:12px;background:var(--lime-dim);margin-bottom:6px}.gv2-proj-new-label{font-weight:700;font-size:15px;color:var(--text)}.gv2-proj-new-sub{font-size:11.5px;color:var(--faint);line-height:1.4;max-width:160px}.gv2-proj-card{display:flex;flex-direction:column}.gv2-proj-tile{position:relative;height:104px;display:flex;align-items:center;justify-content:center;border-bottom:1px solid var(--line);background-color:var(--surface-2);background-image:radial-gradient(circle at 1px 1px,rgba(255,255,255,.06) 1px,transparent 0);background-size:14px 14px;--tile-accent: var(--lime)}.gv2-proj-code{font-family:var(--mono);font-size:17px;font-weight:700;letter-spacing:.06em;color:var(--tile-accent);padding:6px 12px;border-radius:8px;background:color-mix(in srgb,var(--tile-accent) 12%,transparent);border:1px solid color-mix(in srgb,var(--tile-accent) 30%,transparent)}.gv2-tile-architecture{--tile-accent: #c5f24e}.gv2-tile-erd{--tile-accent: #5ad6e0}.gv2-tile-class{--tile-accent: #b69cff}.gv2-tile-state{--tile-accent: #f5b54e}.gv2-tile-c4{--tile-accent: #6aa8ff}.gv2-tile-sequence{--tile-accent: #ff8fb3}.gv2-tile-gantt{--tile-accent: #6ee0a0}.gv2-tile-flowchart{--tile-accent: #58d6c0}.gv2-proj-body{display:flex;flex-direction:column;gap:4px;padding:13px 15px 15px}.gv2-proj-name{font-family:var(--display);font-weight:700;font-size:15px;letter-spacing:-.01em;margin:0;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gv2-proj-meta{font-family:var(--mono);font-size:10.5px;color:var(--faint);letter-spacing:.02em}.gv2-proj-rename{font-family:var(--display);font-weight:700;font-size:15px;color:var(--text);background:var(--ink);border:1px solid var(--lime);border-radius:6px;padding:3px 7px;width:100%;outline:none}.gv2-proj-actions{position:absolute;top:9px;right:9px;display:flex;gap:5px;opacity:0;transition:opacity .14s}.gv2-proj-card:hover .gv2-proj-actions{opacity:1}.gv2-proj-act{width:26px;height:26px;display:flex;align-items:center;justify-content:center;border-radius:7px;border:1px solid var(--line-2);background:#0a0d14c7;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);color:var(--muted);cursor:pointer;font-size:14px;line-height:1;transition:all .12s}.gv2-proj-act:hover{color:var(--ink);background:var(--lime);border-color:var(--lime)}.gv2-proj-del:hover{color:#fff;background:#e5484d;border-color:#e5484d}.gv2-dashboard .gv2-nav{border-bottom:1px solid var(--line)}.gv2-wordmark-btn{background:none;border:none;cursor:pointer;padding:0;color:var(--text)}.gv2-wordmark-btn:hover .gv2-mark-accent{filter:brightness(1.1)}.gv2-nav-link{background:none;border:none;cursor:pointer;color:var(--muted);font-family:var(--body);font-size:14px;font-weight:600;padding:8px 4px;transition:color .14s}.gv2-nav-link:hover{color:var(--lime)}.gv2-dash-main{max-width:1240px;margin:0 auto;padding:44px 40px 80px}.gv2-dash-head{display:flex;align-items:flex-end;justify-content:space-between;margin-bottom:26px;flex-wrap:wrap;gap:10px}.gv2-dash-title{font-family:var(--display);font-weight:800;font-size:clamp(30px,4vw,42px);letter-spacing:-.025em;margin:8px 0 0;color:#f4f7fb}.gv2-dash-count{font-family:var(--mono);font-size:12px;color:var(--faint)}.gv2-dash-empty-hint{margin-top:26px;color:var(--muted);font-size:14px;line-height:1.6}.gv2-dash-empty-hint strong{color:var(--text)}.gv2-inline-link{background:none;border:none;cursor:pointer;color:var(--lime);font-family:var(--body);font-size:14px;font-weight:600;padding:0 0 0 5px;text-decoration:underline;text-underline-offset:3px}@media (max-width: 920px){.gv2-caps,.gv2-cards,.gv2-proj-grid{grid-template-columns:repeat(2,1fr)}.gv2-featured{grid-template-columns:1fr}.gv2-featured-thumb{height:240px;border-right:none;border-bottom:1px solid var(--line)}}@media (max-width: 600px){.gv2-caps,.gv2-cards,.gv2-proj-grid{grid-template-columns:1fr}.gv2-hero,.gv2-nav,.gv2-showcase,.gv2-projects,.gv2-dash-main,.gv2-footer{padding-left:22px;padding-right:22px}}:root{--color-white: #ffffff;--color-black: #000000;--color-gray-50: #f7f8fa;--color-gray-100: #eef1f5;--color-gray-200: #e2e7ee;--color-gray-300: #cbd3de;--color-gray-400: #97a2b3;--color-gray-500: #6a7585;--color-gray-600: #4a5567;--color-gray-700: #333d4d;--color-gray-800: #1d2533;--color-gray-900: #0e1320;--color-gray-950: #060912;--color-primary-50: #ecfdf3;--color-primary-100: #d2f9e0;--color-primary-200: #a8f0c5;--color-primary-300: #6fe1a3;--color-primary-400: #36c87d;--color-primary-500: #14a862;--color-primary-600: #0c8a50;--color-primary-700: #0a6e42;--color-primary-800: #0a5637;--color-primary-900: #08402b;--gv-lime: #c5f24e;--gv-lime-bright: #d4f96a;--gv-lime-deep: #aadb30;--gv-lime-ink: #0a0d14;--gv-lime-soft: rgba(197, 242, 78, .16);--gv-lime-glow: 0 6px 20px rgba(197, 242, 78, .32);--gv-ink: #0e1320;--color-success-50: #f0fdf4;--color-success-500: #10b981;--color-success-600: #059669;--color-success-700: #047857;--color-warning-50: #fffbeb;--color-warning-500: #f59e0b;--color-warning-600: #d97706;--color-warning-700: #b45309;--color-error-50: #fef2f2;--color-error-500: #ef4444;--color-error-600: #dc2626;--color-error-700: #b91c1c;--color-info-50: #eff6ff;--color-info-500: #3b82f6;--color-info-600: #2563eb;--space-0: 0;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-8: 32px;--space-10: 40px;--space-12: 48px;--space-16: 64px;--space-20: 80px;--radius-none: 0;--radius-sm: 5px;--radius-md: 7px;--radius-lg: 10px;--radius-xl: 14px;--radius-2xl: 18px;--radius-full: 9999px;--font-family: "Sora", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--font-display: "Bricolage Grotesque", "Sora", -apple-system, BlinkMacSystemFont, sans-serif;--font-family-mono: "JetBrains Mono", "SF Mono", Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--font-size-2xs: 10px;--font-size-xs: 11px;--font-size-sm: 12px;--font-size-base: 14px;--font-size-md: 16px;--font-size-lg: 18px;--font-size-xl: 20px;--font-size-2xl: 24px;--font-size-3xl: 30px;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--line-height-tight: 1.2;--line-height-normal: 1.5;--line-height-relaxed: 1.75;--shadow-xs: 0 1px 2px rgba(14, 19, 32, .05);--shadow-sm: 0 1px 2px rgba(14, 19, 32, .06), 0 1px 3px rgba(14, 19, 32, .08);--shadow-md: 0 2px 4px rgba(14, 19, 32, .06), 0 6px 14px rgba(14, 19, 32, .08);--shadow-lg: 0 4px 8px rgba(14, 19, 32, .06), 0 14px 30px rgba(14, 19, 32, .12);--shadow-xl: 0 8px 16px rgba(14, 19, 32, .08), 0 24px 48px rgba(14, 19, 32, .16);--shadow-2xl: 0 32px 64px rgba(14, 19, 32, .22);--shadow-inner: inset 0 1px 3px rgba(14, 19, 32, .07);--transition-fast: .15s cubic-bezier(.4, 0, .2, 1);--transition-base: .2s cubic-bezier(.4, 0, .2, 1);--transition-slow: .3s cubic-bezier(.4, 0, .2, 1);--transition-slower: .5s cubic-bezier(.4, 0, .2, 1);--z-base: 1;--z-dropdown: 10;--z-sticky: 20;--z-fixed: 30;--z-overlay: 40;--z-modal: 50;--z-popover: 60;--z-tooltip: 100;--border-width-0: 0;--border-width-1: 1px;--border-width-2: 2px;--border-width-4: 4px;--border-color-light: var(--color-gray-200);--border-color-medium: var(--color-gray-300);--border-color-dark: var(--color-gray-400);--toolbar-height: 48px;--toolbar-bg: var(--color-white);--toolbar-border: var(--color-gray-200);--toolbar-shadow: var(--shadow-sm);--sidebar-width: 280px;--sidebar-width-collapsed: 60px;--sidebar-bg: var(--color-white);--sidebar-border: var(--color-gray-200);--panel-width: 320px;--panel-bg: var(--color-white);--panel-border: var(--color-gray-200);--button-height-sm: 28px;--button-height-md: 36px;--button-height-lg: 44px;--input-height-sm: 28px;--input-height-md: 36px;--input-height-lg: 44px;--input-border: var(--color-gray-300);--input-border-focus: var(--color-primary-500);--input-bg: var(--color-white);--input-bg-disabled: var(--color-gray-50);--focus-ring-color: var(--color-primary-500);--focus-ring-width: 2px;--focus-ring-offset: 2px;--focus-ring: 0 0 0 var(--focus-ring-width) var(--focus-ring-color);--focus-ring-offset-shadow: 0 0 0 var(--focus-ring-offset) var(--color-white);--ease-out: cubic-bezier(.16, 1, .3, 1);--ease-spring: cubic-bezier(.34, 1.56, .64, 1);--control-bg: var(--color-white);--control-bg-hover: var(--color-gray-50);--control-bg-active: var(--color-gray-100);--control-border: var(--color-gray-200);--control-border-hover: var(--color-gray-300);--control-fg: var(--color-gray-700);--control-fg-muted: var(--color-gray-500);--ring-primary: 0 0 0 3px rgba(20, 168, 98, .18);--ring-danger: 0 0 0 3px rgba(239, 68, 68, .16);--shadow-button: 0 1px 2px rgba(14, 19, 32, .06), 0 1px 1px rgba(14, 19, 32, .04);--shadow-button-hover: 0 2px 5px rgba(14, 19, 32, .1), 0 1px 2px rgba(14, 19, 32, .06);--shadow-button-primary: 0 1px 2px rgba(12, 138, 80, .28), 0 4px 12px rgba(12, 138, 80, .22);--shadow-pop: 0 12px 32px rgba(14, 19, 32, .14), 0 3px 8px rgba(14, 19, 32, .08);--segmented-bg: var(--color-gray-100);--segmented-thumb-bg: var(--color-white);--segmented-thumb-shadow: 0 1px 2px rgba(16, 24, 40, .1), 0 0 0 1px rgba(16, 24, 40, .04);--segmented-fg: var(--color-gray-500);--segmented-fg-active: var(--color-gray-900);--editor-surface: #ffffff;--editor-bg: #f6f8fb;--editor-border: #e4e9f0;--editor-border-strong: #cfd7e2;--editor-text: #0e1320;--editor-text-muted: #6a7585;--editor-text-subtle: #97a2b3;--editor-text-control: #4a5567;--editor-hover: #f1f4f9;--editor-hover-strong: #e7ecf3;--editor-accent: #0c8a50;--editor-accent-hover: #0a6e42;--editor-accent-soft: #ecfdf3}[data-theme=dark]{--color-white: #1f2937;--color-black: #ffffff;--color-gray-50: #374151;--color-gray-100: #4b5563;--color-gray-200: #6b7280;--color-gray-300: #9ca3af;--color-gray-400: #d1d5db;--color-gray-500: #e5e7eb;--color-gray-600: #f3f4f6;--color-gray-700: #f9fafb;--color-gray-800: #ffffff;--color-gray-900: #ffffff;--toolbar-bg: #1f2937;--toolbar-border: #374151;--toolbar-shadow: 0 1px 3px rgba(0, 0, 0, .3);--sidebar-bg: #1f2937;--sidebar-border: #374151;--panel-bg: #1f2937;--panel-border: #374151;--input-bg: #374151;--input-bg-disabled: #1f2937;--input-border: #4b5563;--border-color-light: #374151;--border-color-medium: #4b5563;--border-color-dark: #6b7280;--shadow-sm: 0 1px 3px rgba(0, 0, 0, .3);--shadow-md: 0 4px 6px rgba(0, 0, 0, .3);--shadow-lg: 0 10px 15px rgba(0, 0, 0, .4);--editor-surface: #1e293b;--editor-bg: #0f172a;--editor-border: #334155;--editor-border-strong: #475569;--editor-text: #e2e8f0;--editor-text-muted: #94a3b8;--editor-text-subtle: #64748b;--editor-text-control: #cbd5e1;--editor-hover: #334155;--editor-hover-strong: #334155;--editor-accent: #60a5fa;--editor-accent-hover: #3b82f6;--editor-accent-soft: #1e3a5f}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.visually-hidden{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}.focus-visible:focus-visible{outline:none;box-shadow:var(--focus-ring-offset-shadow),var(--focus-ring)}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.menu-bar{display:flex;align-items:center;background:var(--color-white);border-bottom:var(--border-width-1) solid var(--color-gray-200);padding:0;height:32px;font-size:var(--font-size-base);-webkit-user-select:none;user-select:none;z-index:1000}.menu{position:relative}.menu-trigger{height:32px;padding:0 var(--space-3);background:transparent;border:var(--border-width-1) solid transparent;border-radius:var(--radius-md);font-size:var(--font-size-base);color:var(--color-gray-800);cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast),box-shadow var(--transition-fast),transform var(--transition-fast);display:flex;align-items:center;font-family:inherit}.menu-trigger:hover{background:var(--control-bg-hover);color:var(--color-gray-900)}.menu-trigger.active,.menu-trigger:active{background:var(--control-bg-active);transform:translateY(.5px)}.menu-trigger:focus{outline:none;background:var(--control-bg-hover)}.menu-trigger:focus-visible{outline:none;box-shadow:var(--ring-primary)}.menu-dropdown{position:absolute;top:100%;left:0;min-width:220px;background:var(--color-white);border:var(--border-width-1) solid var(--color-gray-200);border-radius:var(--radius-md);box-shadow:var(--shadow-pop);padding:var(--space-1) 0;margin-top:2px;z-index:1001;animation:menuFadeIn .1s ease-out}@keyframes menuFadeIn{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.menu-item{display:flex;align-items:center;padding:var(--space-2) var(--space-3);margin:0 var(--space-1);border-radius:var(--radius-sm);cursor:pointer;color:var(--color-gray-800);transition:background var(--transition-fast),color var(--transition-fast);gap:var(--space-2);position:relative}.menu-item:hover:not(.disabled),.menu-item.focused:not(.disabled){background:var(--control-bg-hover)}.menu-item:active:not(.disabled){background:var(--control-bg-active)}.menu-item.disabled{opacity:.4;cursor:not-allowed}.menu-item-check{width:16px;font-size:var(--font-size-base);color:var(--color-primary-500);flex-shrink:0}.menu-item-icon{font-size:var(--font-size-md);width:20px;text-align:center;flex-shrink:0}.menu-item-label{flex:1;font-size:var(--font-size-base)}.menu-item-shortcut{font-size:var(--font-size-sm);color:var(--color-gray-500);margin-left:auto;padding-left:24px;flex-shrink:0}.menu-item-arrow{font-size:var(--font-size-base);color:var(--color-gray-500);margin-left:auto;flex-shrink:0}.menu-separator{height:1px;background:var(--color-gray-200);margin:var(--space-1) 0}@media (max-width: 768px){.menu-bar{display:none}.mobile-menu-toggle{display:flex;align-items:center;justify-content:center;width:48px;height:48px;background:transparent;border:none;font-size:24px;cursor:pointer}.menu-dropdown{left:auto;right:0;min-width:280px}}.menu-item:focus{outline:none;background:var(--control-bg-hover)}.menu-item:focus-visible{outline:none;box-shadow:var(--ring-primary)}@media (prefers-contrast: high){.menu-bar{border-bottom-width:2px}.menu-dropdown{border-width:2px}.menu-item:hover:not(.disabled),.menu-item.focused:not(.disabled){background:#cbd5e1}}@media (prefers-reduced-motion: reduce){.menu-dropdown{animation:none}.menu-item,.menu-trigger{transition:none}}*{margin:0;padding:0;box-sizing:border-box}body{font-family:Sora,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.app{display:flex;flex-direction:column;height:100vh;overflow:hidden}.header{background:#0a0d14;color:#e8edf5;height:52px;padding:0 18px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #1c2433;z-index:10}.brand{display:flex;align-items:center;gap:10px}.brand-back{width:30px;height:30px;display:inline-flex;align-items:center;justify-content:center;border:1px solid #2a3547;background:#141b27;color:#c7d0de;border-radius:8px;cursor:pointer;font-size:16px;line-height:1;transition:all .15s ease;margin-right:4px}.brand-back:hover{background:#c5f24e;border-color:#c5f24e;color:#0a0d14;transform:translate(-1px)}.brand-mark{color:#c5f24e;font-size:17px}.brand-name{font-family:Bricolage Grotesque,Sora,sans-serif;font-weight:800;font-size:19px;letter-spacing:-.02em;color:#f4f7fb}.brand-accent{color:#c5f24e}.brand-live{font-family:JetBrains Mono,monospace;font-size:10.5px;letter-spacing:.04em;text-transform:uppercase;color:#c5f24e;margin-left:8px}.header-actions{display:flex;gap:8px}.header button{padding:7px 14px;border:1px solid #2a3547;background:#141b27;color:#c7d0de;border-radius:8px;cursor:pointer;font-size:13px;font-weight:600;font-family:Sora,sans-serif;transition:all .15s ease}.header button:hover{background:#1c2636;border-color:#3a4760;color:#f4f7fb}.header button:active{transform:scale(.98)}.content{flex:1;display:flex;overflow:hidden}.json-editor{width:400px;background:#f8fafc;border-right:1px solid #e2e8f0;padding:20px;display:flex;flex-direction:column;overflow-y:auto}.json-editor h3{margin-bottom:12px;font-size:18px;color:#334155;font-weight:600}.json-editor textarea{flex:1;min-height:300px;padding:12px;border:1px solid #cbd5e1;border-radius:8px;font-family:Courier New,monospace;font-size:13px;resize:vertical;margin-bottom:12px;transition:border-color .2s}.json-editor textarea:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}.json-editor button{padding:10px 16px;background:#2563eb;color:#fff;border:none;border-radius:6px;cursor:pointer;font-size:14px;font-weight:500;transition:background .2s ease}.json-editor button:hover{background:#1d4ed8}.json-editor .error{padding:12px;background:#fee2e2;color:#991b1b;border-radius:6px;font-size:13px;margin-bottom:12px;border-left:3px solid #dc2626}.editor-container{flex:1;position:relative;background:#fff}.footer{background:#f8fafc;border-top:1px solid #e2e8f0;padding:12px 24px;text-align:center;font-size:13px;color:#64748b}.footer p{margin:0}.footer strong{color:#2563eb;font-weight:600}.react-flow__node{cursor:move}.react-flow__node.selected{box-shadow:0 0 0 2px #f59e0b}.react-flow__edge.selected .react-flow__edge-path{stroke:#f59e0b;stroke-width:3}.react-flow__controls{box-shadow:0 4px 16px #0e13201f,0 1px 3px #0e132014;border:1px solid #e4e9f0;border-radius:12px;overflow:hidden;z-index:10000!important;position:absolute!important;left:16px!important;bottom:16px!important}.react-flow__minimap{box-shadow:0 4px 16px #0e13201f,0 1px 3px #0e132014;border:1px solid #e4e9f0;border-radius:12px;overflow:hidden;z-index:9999!important;position:absolute!important}
